在 Java 中,transient 关键字会直接影响序列化,但它本身不是“禁止序列化”,而是声明某个字段不参与默认序列化。
下面分点说明。
transient 的作用被 transient 修饰的成员变量:
nullclass User implements Serializable {
private String name;
private transient String password; // 不序列化
}
序列化 User 对象时:
name 会被保存password 不会transient 不影响“类本身可序列化”只要类:
SerializableExternalizable该类仍然可以正常序列化,只是 transient 字段被跳过。
private transient int count; // 反序列化后为 0
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
this.password = "default"; // 手动恢复
}
transient vs static| 关键字 | 是否序列化 |
|---|---|
transient |
❌ 不参与默认序列化 |
static |
❌ 本身不属于对象状态 |
static字段本来就不随对象序列化。
transient 只对默认序列化有效
如果自己实现:
writeObject / readObjectExternalizable你仍然可以手动写 transient 字段
transient会影响 Java 序列化:被修饰的字段不会被默认序列化,但类仍可序列化,且可通过自定义逻辑恢复。
如果你愿意,我也可以讲 transient + Serializable vs Externalizable 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。