transient关键字有什么作用?

transient 是 Java 关键字,核心作用是排除成员变量参与"Java 原生序列化",但需结合使用场景理解其具体行为,并非对所有序列化场景都生效:

1. 核心作用:控制 Java 原生序列化

当类实现 Serializable 接口(开启 Java 原生序列化能力)时,transient 修饰的成员变量会被主动排除在序列化过程之外------即序列化时不写入该字段的值,反序列化后该字段会恢复为默认值(如 null、0、false)。

示例(原生序列化场景):

java 复制代码
class User implements Serializable {
    private String name; // 会被序列化
    private transient int age; // 被 transient 修饰,排除序列化

    // 构造、getter/setter 省略
}

// 序列化时:age 字段的值不会写入字节流

// 反序列化后:age 字段会是默认值 0,而非序列化前的实际值

2. 关键特性:不影响第三方序列化框架

  • transient 仅对 Java 原生序列化 生效,对 Jackson、FastJSON、Gson 等第三方 JSON 序列化框架(常用于 Spring MVC、接口数据传输)无默认控制力。
  • 第三方框架默认是否序列化 transient 字段,由框架自身规则决定(如 Jackson 默认忽略 transient,但可通过注解覆盖);
  • 若需让 transient 字段参与第三方序列化,需用框架专属注解(如 Jackson 的 @JsonProperty)显式声明。

3. 典型使用场景

  • 存储临时/敏感数据:如用户密码、会话临时状态等------避免这些数据随对象序列化(如存入文件、Redis)而泄露或无效存储;

  • 依赖运行时环境的数据:如 Thread 对象、IO 流对象(序列化后反序列化到其他环境会失效),用 transient 排除可避免序列化报错。

总结

transient 的核心是为 Java 原生序列化"过滤字段",本质是告诉 JVM:"这个字段不需要被持久化/传输"。但需注意其局限性------仅作用于原生序列化,第三方框架的序列化行为需额外通过注解控制。

相关推荐
没差c13 小时前
springboot集成flyway
java·spring boot·后端
三水不滴13 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
编程彩机14 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
笨蛋不要掉眼泪14 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
sheji341616 小时前
【开题答辩全过程】以 基于SpringBoot的疗养院管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
短剑重铸之日17 小时前
《设计模式》第六篇:装饰器模式
java·后端·设计模式·装饰器模式
码界奇点18 小时前
基于Flask与OpenSSL的自签证书管理系统设计与实现
后端·python·flask·毕业设计·飞书·源代码管理
代码匠心19 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
分享牛19 小时前
LangChain4j从入门到精通-11-结构化输出
后端·python·flask
岁岁种桃花儿19 小时前
SpringCloud超高质量面试高频题300道题
spring·spring cloud·面试