transient 关键字用于标记 不希望被序列化(Serialization) 的字段。序列化是指将对象的状态保存到字节流中,以便将其传输或存储。当使用如 ObjectOutputStream 进行序列化时,transient 修饰的字段将 不会被序列化。
✅ 1. 使用场景
🔸 避免序列化敏感信息
            
            
              java
              
              
            
          
          private transient String password;
        🔸 某些字段不需要持久化(如缓存、临时数据)
            
            
              java
              
              
            
          
          private transient List<CacheData> cache;
        🔸 非序列化类型字段(非 Serializable 类型)
如果某字段不是 Serializable,又不想整个类报错,可以把这个字段设为 transient。
            
            
              java
              
              
            
          
          private transient SomeNonSerializableType helper;
        ✅ 2. 注意事项
- 
transient只能用于字段(不能修饰类或方法)。 - 
静态字段也不会被序列化,但它们 不能 用
transient修饰。 - 
如果你用
transient修饰final字段,在反序列化时会报错或不符合预期(因为 final 字段需要构造函数赋值)。 
✅ 3. 对比 static 和 transient
| 修饰符 | 是否序列化 | 说明 | 
|---|---|---|
| 普通字段 | 是 | 被完整序列化 | 
static | 
否 | 属于类,不属于对象 | 
transient | 
否 | 明确表示不需要序列化 | 
static transient | 
否 | 多余,static 本身就不会序列化 | 
写小说也写代码,左手架空世界,右手现实逻辑。
📚 欢迎来看博客,起点同笔名在写小说,欢迎来找我玩。