Java静态序列化规则?

aho*_*der 34 java serialization static transient

我正在使用一些静态方法和字段进行保存状态序列化.我可以发誓虽然序列化和静态造成了混乱.我应该让所有静态瞬态?膨胀呼叫会恢复静态正常吗?

Rob*_*bin 61

statics是隐式的transient,所以你不需要声明它们.

序列化用于序列化实例,而不是. static字段(方法无关紧要,因为它们是类定义的一部分,因此它们不是序列化的)将重新初始化为加载类时设置的任何值.

如果您有可变static字段,则对该值所做的更改将丢失.


小智 9

简短的规则如下:

1.static序列化时不保存变量。相反,在反序列化过程中,static变量是从类级别初始化开始的。

2.statictransient基于关键字的变量在序列化过程中都被忽略。

3. 类名 和serialVersionUID都被序列化为字节流,反序列化时serialVersionUID,从源读取的 与本地类相同static变量进行比较。这就是为什么serialVersionUID声明为static public final不需要创建其他对象来比较这些 versionUID(s)。

  • 如果发现任何差异, 则会发生InvalidClassException