Java静态序列化规则?
我正在使用一些静态方法和字段进行保存状态序列化。我可以发誓,虽然序列化和静态造成了混乱。我应该让所有的静电都是瞬态的吗?并且膨胀调用是否会将静态恢复为正常状态?Java静态序列化规则?,java,serialization,static,transient,Java,Serialization,Static,Transient,我正在使用一些静态方法和字段进行保存状态序列化。我可以发誓,虽然序列化和静态造成了混乱。我应该让所有的静电都是瞬态的吗?并且膨胀调用是否会将静态恢复为正常状态?静态字段被忽略以进行序列化 更新为说静态,而不是我最初打算说的瞬态。静态是隐式的瞬态,因此您不需要这样声明它们 序列化用于序列化实例,而不是类静态字段(方法是不相关的,因为它们是类定义的一部分,所以不会序列化)将重新初始化为加载类时设置的任何值 如果您有一个可变的静态字段,则对该值所做的更改将丢失。静态字段不会序列化。“序列化类的实例时,
静态
字段被忽略以进行序列化
更新为说
静态
,而不是我最初打算说的瞬态
。静态
是隐式的瞬态
,因此您不需要这样声明它们
序列化用于序列化实例,而不是类<代码>静态字段(方法是不相关的,因为它们是类定义的一部分,所以不会序列化)将重新初始化为加载类时设置的任何值
如果您有一个可变的
静态
字段,则对该值所做的更改将丢失。静态
字段不会序列化。“序列化类的实例时,只保存非静态和非瞬态实例数据。不保存类定义。当您尝试反序列化对象时,它们必须可用“简短规则如下所示:
1.static
变量在序列化过程中不保存。相反,在反序列化过程中,static
变量从类级初始化启动。
2.静态
和瞬态
基于关键字的变量在序列化过程中都被忽略。
3.类名和serialVersionUID
都被序列化为字节流,当反序列化时,从源代码读取的serialVersionUID
将与本地类相同的static
变量进行比较。这就是为什么serialVersionUID
被声明为static public final
,这样就没有进一步的obje需要创建ct以比较这些版本ID
- 如果发现任何差异,则出现InvalidClassException 就会发生