1.transient关键字的作用和使用方法
- transient关键字的作用:一个类实现了Serializable接口,这个类定义的对象就可以序列化和反序列化。不需要序列化的属性加上transient关键字修饰。
- transient关键字只能修饰变量,不能修饰方法和类。
- transient关键字使用示例:
public class User implements Serializable {
private String userName;
private transient String password;
}
public class TransientTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User user = new User();
user.setUserName("root");
user.setPassword("123456");
System.out.println("序列化前:" + user.getUserName() + "," + user.getPassword());
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));
outputStream.writeObject(user);
outputStream.flush();
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("object.txt"));
User object = (User) inputStream.readObject();
System.out.println("序列化后" + object.getUserName() + "," + object.getPassword());
inputStream.close();
outputStream.close();
}
}
- 如何序列化被transient关键字修饰的类变量:实现Externalizable接口.
- 被static修饰的类变量不管是否使用transient关键字修饰,都是不能被序列化的。
public class User implements Serializable {
private String userName;
private static String password;
}
public class TransientTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User user = new User();
user.setUserName("root");
user.setPassword("123456");
System.out.println("序列化前:" + user.getUserName() + "," + user.getPassword());
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));
outputStream.writeObject(user);
outputStream.flush();
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("object.txt"));
user.setPassword("root");
User object = (User) inputStream.readObject();
System.out.println("序列化后" + object.getUserName() + "," + object.getPassword());
inputStream.close();
outputStream.close();
}
}
- final关键字修饰的变量如果不使用transient关键字修饰,也参与序列化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)