【发布时间】:2011-09-19 17:51:04
【问题描述】:
我正在使用一些静态方法和字段进行保存状态序列化。我可以发誓虽然序列化和静态造成了混乱。我应该使所有静态的瞬态?并且膨胀呼叫会恢复正常的静态吗?
【问题讨论】:
标签: java serialization static transient
我正在使用一些静态方法和字段进行保存状态序列化。我可以发誓虽然序列化和静态造成了混乱。我应该使所有静态的瞬态?并且膨胀呼叫会恢复正常的静态吗?
【问题讨论】:
标签: java serialization static transient
statics 隐含为transient,因此您不需要这样声明它们。
序列化是为了序列化实例,而不是类。 static 字段(方法无关紧要,因为它们是类定义的一部分,因此它们不会被序列化)将被重新初始化为加载类时设置的任何值。
如果您有一个可变的 static 字段,那么对该值所做的更改将会丢失。
【讨论】:
短规则可以如下:
1。 static 变量在序列化期间不保存。相反,在反序列化过程中,static 变量是从类级别初始化开始的。
2。 static 和 transient 基于关键字的变量在序列化过程中都会被忽略。
3. 类名和serialVersionUID 都被序列化为字节流,当反序列化时,从源读取的serialVersionUID 与本地类相同的static 变量进行比较。这就是 serialVersionUID 被声明为 static public final 的原因,这样就无需再创建对象来比较这些 versionUID。
【讨论】:
static 字段在序列化时被忽略。
更新为 static 而不是我原本打算的 transient...
【讨论】:
static 字段未序列化。
【讨论】:
“当你序列化一个类的实例时,唯一保存的就是非静态和非瞬态的实例数据。类定义没有被保存。当你尝试反序列化一个对象时它们必须可用”@ 987654321@
【讨论】:
静态字段永远不能成为“ser”文件的一部分。静态+瞬态与瞬态相同。
【讨论】:
静态属于类,灭菌处理对象/实例。
因此声明为静态的,它不再属于对象并且不能被序列化。
【讨论】: