transient 修饰符

模块 2:Java 核心
第 16 级 , 课程 1
可用

“你好,阿米戈!我要告诉你有关序列化的更多细节。

假设我们的类包含对某个 InputStream 的引用。那么就无法对其进行序列化,对吗?

"是的。你亲口说过,流无法序列化。而且,无法序列化包含不可序列化数据的对象。”

"是的。就是这样。但是,如果类所存储的数据在其状态中未扮演重要角色,却阻止该类被视为可序列化的类,该怎么办?没关系,类可能会存储无用内容。它可以随时甚至永久抛弃此数据。”

对于这些情况,Java 创建者给出了 transient 关键字。如果将此关键字写在成员变量之前,则该变量在序列化期间将被忽略。其状态不会被保存或重构。就像它不存在一样。这正好针对我们刚才考虑的情况。

还记得缓存和 volatile 修饰符吗?任何规则都有例外

下面就是这样一个示例:

“cat”示例包含将被序列化忽略的变量:

代码
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;

 transient public InputStream in = System.in; 
}
评论 (3)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
afei1234567 级别 28,China,China
9 九月 2023
mark
有梦想的咸鱼 级别 30,Hangzhou,China
15 六月 2023
mark
学不了一点 级别 22,United Kingdom,中国
23 五月 2023
mark