首页主机资讯java transient的作用是什么

java transient的作用是什么

时间2023-12-25 16:01:02发布访客分类主机资讯浏览719
导读:在Java中,transient关键字用于修饰类的成员变量,它的作用是指示编译器将被修饰的变量或属性在对象序列化时忽略,即不参与对象的持久化操作。 当一个Java对象需要被序列化(即转换为字节流以便存储、传输等操作)时,所有成员变量都会被自...

在Java中,transient关键字用于修饰类的成员变量,它的作用是指示编译器将被修饰的变量或属性在对象序列化时忽略,即不参与对象的持久化操作。

当一个Java对象需要被序列化(即转换为字节流以便存储、传输等操作)时,所有成员变量都会被自动序列化。然而,有时候某些成员变量不应该被序列化,比如密码、临时变量等。这时就可以使用transient关键字修饰这些变量,让它们在序列化过程中被忽略。

举个例子,假设有一个User类,其中包含了用户名和密码两个成员变量。当对User对象进行序列化时,不希望密码被序列化到字节流中。此时可以将密码成员变量声明为transient,这样在序列化过程中密码会被忽略,只有用户名会被序列化。

public class User implements Serializable {
    
    private String username;
    
    private transient String password;

    
    // 省略构造方法、getter和setter等
    
    @Override
    public String toString() {

        return "User{
" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}
    ';

    }

}
    

当对一个User对象进行序列化和反序列化时,密码字段将被忽略。

User user = new User("Alice", "123456");
    
System.out.println("Before serialization: " + user);
    
 
// 对User对象进行序列化
try (FileOutputStream fos = new FileOutputStream("user.ser");

     ObjectOutputStream oos = new ObjectOutputStream(fos)) {
    
    oos.writeObject(user);

}
    
 
// 对User对象进行反序列化
try (FileInputStream fis = new FileInputStream("user.ser");

     ObjectInputStream ois = new ObjectInputStream(fis)) {
    
    User deserializedUser = (User) ois.readObject();
    
    System.out.println("After deserialization: " + deserializedUser);

}

输出结果为:

Before serialization: User{
username='Alice', password='123456'}

After deserialization: User{
username='Alice', password='null'}
    

从输出结果可以看出,在反序列化后获得的User对象中,密码字段的值为null,即被忽略了。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: java transient的作用是什么
本文地址: https://pptw.com/jishu/579294.html
es6合并两个对象的方法是什么 phantomjs的优点和缺点是什么

游客 回复需填写必要信息