Dan*_*Dan 1 java serialization static member
假设我创建了一个B类实例,它有一个静态变量x,在B类声明中赋值为3.在main()方法中,我这样做:
B b = new B();
b.x = 7; //allowed to use an instance to set the static member value
Run Code Online (Sandbox Code Playgroud)
在此之后,b被序列化然后反序列化.然后,出现以下行:
System.out.println ("static: " + b.x);
Run Code Online (Sandbox Code Playgroud)
有什么价值?7或3?
我知道静态变量不是序列化的,但是,因为整个类只有一个静态成员的副本,并且该值设置为7,如果在反序列化实例后保留它?
这是发生的事情:
如果需要所描述的逻辑,则需要添加另一个静态变量,该变量计算创建的实例数,writeObject并readObject使用自定义逻辑覆盖和方法.
如果在JVM的同一个实例中对其进行反序列化,则第二个代码段将返回7.这是因为bx的值设置为7.由于B的实例已序列化并反序列化,因此未更改.
如果序列化对象,关闭JVM,调出新的JVM,然后反序列化对象(除了静态初始化之外的任何地方都不设置bx),bx的值将为3.
| 归档时间: |
|
| 查看次数: |
4846 次 |
| 最近记录: |