Java 静态序列化规则?

2022-09-01 01:22:30

我正在使用一些静态方法和字段进行保存状态序列化。我本可以发誓,尽管序列化和静态造成了混乱。我应该让所有静态的瞬态吗?充气调用会恢复正常状态吗?


答案 1

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

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

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


答案 2

简短规则可以如下所示:

1. 在序列化过程中不保存变量。相反,在反序列化过程中,变量是从类级初始化启动的。staticstatic

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

3. 类名和序列化为字节流,反序列化时,从源读取,与局部类同一变量进行比较。这就是为什么声明为不需要创建进一步的对象来比较这些版本UID的原因。serialVersionUIDserialVersionUIDstaticserialVersionUIDstatic public final

  • 如果发现任何差异,则会发生无效类异常