温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

transient影响java序列化吗

发布时间:2026-09-14 10:18:38 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 中,transient 关键字会直接影响序列化,但它本身不是“禁止序列化”,而是声明某个字段不参与默认序列化

下面分点说明。


1. transient 的作用

transient 修饰的成员变量:

  • 不会被默认的 Java 序列化机制写入流
  • 反序列化时不会被恢复
  • 反序列化后该字段值为:
    • 基本类型:默认值(0 / false 等)
    • 引用类型:null

示例

class User implements Serializable {
    private String name;
    private transient String password; // 不序列化
}

序列化 User 对象时:

  • name 会被保存
  • password 不会

2. transient 不影响“类本身可序列化”

只要类:

  • 实现 Serializable
  • 或自定义 Externalizable

该类仍然可以正常序列化,只是 transient 字段被跳过。


3. 反序列化时的常见处理方式

方式一:默认值(最常见)

private transient int count; // 反序列化后为 0

方式二:在反序列化后恢复(推荐)

private void readObject(ObjectInputStream in)
        throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    this.password = "default"; // 手动恢复
}

4. transient vs static

关键字 是否序列化
transient ❌ 不参与默认序列化
static ❌ 本身不属于对象状态

static 字段本来就不随对象序列化。


5. 常见使用场景

  • 密码、密钥等敏感信息
  • 缓存数据(可重新计算)
  • 线程、连接、IO 流等资源对象
  • 大的、可重建的数据结构

6. 注意事项

  • transient 只对默认序列化有效

  • 如果自己实现:

    • writeObject / readObject
    • Externalizable

    仍然可以手动写 transient 字段


一句话总结

transient 会影响 Java 序列化:被修饰的字段不会被默认序列化,但类仍可序列化,且可通过自定义逻辑恢复。

如果你愿意,我也可以讲 transient + Serializable vs Externalizable 的区别

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI