青岛Java培训
达内青岛山东路中心

17343065216

热门课程

为什么 Java 中要有 transient 字段?

  • 时间:2019-06-21 13:12
  • 发布:青岛Java培训
  • 来源:青岛Java培训

Java 中的 transient 关键字用来表明部分属性不能被序列化(类似于保存一个文件)。

为什么 Java 中要有 transient 字段?

Java Language Specification, Java SE 7 Edition, Section 8.3.1.3. transient Fields: 中解释到

Variables may be marked transient to indicate that they are not part of the persistent state of an object.

大意是:一个对象中被 transient 声明的变量是不会被持久化的。

例如:你有一些字段是通过其他字段派生而来,直接运行程序执行它,并不需要通过序列化的方式保持其状态。

这里有一个 GalleryImage 类,它包含一张图片和一个缩略图,其中缩略图是派生自图片。

class GalleryImage implements Serializable{ private Image image; private transient Image thumbnailImage; private void generateThumbnail() { // Generate thumbnail. } private void readObject(ObjectInputStream inputStream) throws IOException, ClassNotFoundException { inputStream.defaultReadObject(); generateThumbnail(); } }

在这个例子中,thumbnailImage 是一张缩略图,他通过调用 generateThumbnail 方法生成。

这个 thumbnailImage 字段被 transient 声明,所以只有原始字段 image 会被序列化而不是它们两个都可以被序列号。这意味着只需要很少的空间来保存序列化的对象。(当然是否序列化某个字段是依赖系统的设计,毕竟我这只是一个例子)

为什么 Java 中要有 transient 字段?

在反序列化的时候,使用 readObject 方法把对象回复到序列化之前的状态,但是因为没有序列化 thumbnailImage 字段,所以我们需要重写 readObject 方法以便在反序列化的时候可以通过 generateThumbnail 方法生成 thumbnailImage 属性。

以上就是青岛达内给大家做的内容详解,更多关于IT知识的学习,请继续关注青岛达内

上一篇:Java为什么这么强?写给初学的你,准备就业必看
下一篇:Java 虚拟机内存区域划分详解

马上预约七天免费体验课

姓名:

电话:

Java 虚拟机内存区域划分详解

为什么 Java 中要有 transient 字段?

Java为什么这么强?写给初学的你,准备就业必看

2018 JVM 生态报告:79% 的 Java 开发者都愿意使用 Java 8

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊