面试题答案
一键面试效果
当在Java中使用transient
关键字修饰成员变量时,该变量在对象进行序列化时不会被持久化保存。也就是说,在将对象转换为字节流进行存储或传输的过程中,被transient
修饰的变量的值不会包含在序列化后的字节流中。当反序列化该对象时,被transient
修饰的变量将被赋予其类型的默认值(如int
为0,Object
为null
等)。
代码示例
import java.io.*;
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
// 使用transient关键字修饰password变量
private transient String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
public void display() {
System.out.println("Name: " + name + ", Password: " + password);
}
}
public class SerializationExample {
public static void main(String[] args) {
User user = new User("John", "secret");
// 序列化对象
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
oos.writeObject(user);
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化对象
User deserializedUser;
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.ser"))) {
deserializedUser = (User) ois.readObject();
deserializedUser.display();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
在上述代码中,User
类实现了Serializable
接口,其中password
变量被transient
修饰。当对User
对象进行序列化和反序列化后,输出结果中password
将为null
,因为它在序列化过程中没有被保存。