1. 概要

在 Java 中,transient 关键字用于标记一个成员变量,指示 Java 序列化机制在序列化对象时忽略该特定变量。这意味着当对象被转换为字节流(例如,保存到文件或通过网络传输)时,带有 transient 关键字的变量值不会被包括进去。当这个对象被反序列化(即从字节流恢复成对象)时,这个被标记为 transient 的变量将被设为该类型的默认值(比如,数字类型为 0,布尔型为 false,引用类型为 null 等)。
transient关键字的主要用途包括:

  1. 安全考虑:防止敏感信息如密码、安全令牌等在序列化过程中被保存或泄露。

  2. 优化序列化性能:有时对象中的某些数据可能很大,而且在反序列化时可以重新计算或从其他来源获取,无需保存,这样可以减少序列化后的数据量,提高效率。

  3. 维护对象一致性:对于那些无法直接序列化或反序列化后可能破坏对象状态的信息(如线程相关的对象、数据库连接等),使用 transient 可以避免潜在的问题。

示例:

public class User implements Serializable {
    private String name;
    private transient String password; // 这个字段在序列化时将被忽略
    // 省略构造方法、getter和setter
}

在这个例子中,当 User 对象被序列化时,name 字段会被保存,但 password 字段会被忽略,从而保护了用户的密码信息安全。