【Transient】Transient 的作用和用法
1 前言
大家经常看源码会发现这个关键字,那么我们这节我们讲一下 transient 关键字,先看看它的的用法和作用:
- 用法:只能用于修饰成员变量
- 作用:Java 的 Serilizable 提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用序列化机制来保存它,这是可以通过 transient 来修饰,就不会持久化该属性了。
2 序列化
2.1 什么是序列化
简单来说:将数据结构或对象转换成二进制字节流的过程
2.2 为什么要序列化
- 用于对象传输,比如我们的服务要把结果通过网络返回给用户,是不是需要先把结果序列化,然后才能传输,你不序列化是不是就是难为人家网络
- 用于持久化,我们的对象是不是要落磁盘,就像我们的数据库持久化数据
2.3 怎么序列化
对于我们的 java 只需要实现 Serializable,至于人 java 内部怎么序列化的,咱们这里就不做讨论了.
3 示例
我们来写个例子尝试一下:
public class TestTransient { static class Person implements Serializable { private String name; private Integer age; private transient String password; public Person(String name, Integer age, String password) { this.name = name; this.age = age; this.password = password; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", password='" + password + '\'' + '}'; } } public static void main(String[] args) throws IOException, ClassNotFoundException { Person person = new Person("狗子", 1, "xxx"); System.out.println("序列化前:" + person); ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("person.txt")); // 持久化对象-序列化 os.writeObject(person); os.flush(); os.close(); ObjectInputStream is = new ObjectInputStream(new FileInputStream("person.txt")); // 读取对象-反序列化 person = (Person) is.readObject(); is.close(); System.out.println("序列化后:" + person); } }
4 小结
- transient 只能修饰变量,用于忽略序列化;
- 一个静态变量不管是不是 transient 修饰,都不能被序列化(如果反序列化后类中static变量还有值,则值为当前JVM中对应static变量的值)
分类:
源码 / JDK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了