Pen*_*uck 7 java serialization static deserialization
从SCJP 6学习指南 - 有一个问题要求输出以下有关序列化的代码:
import java.io.*;
public class TestClass {
static public void main(String[] args) {
SpecialSerial s = new SpecialSerial();
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("myFile"));
os.writeObject(s);
os.close();
System.out.print(++s.z + " ");
s = null; // makes no difference whether this is here or not
ObjectInputStream is = new ObjectInputStream(new FileInputStream("myFile"));
SpecialSerial s2 = (SpecialSerial)is.readObject();
is.close();
System.out.println(s2.y + " " + s2.z);
} catch (Exception e) {e.printStackTrace();}
}
}
class SpecialSerial implements Serializable {
transient int y = 7;
static int z = 9;
}
Run Code Online (Sandbox Code Playgroud)
输出为:10 0 10
给出这个的原因是静态变量z没有被序列化,我不会期望它.
在println()语句中将对象写入文件后,static int变量z的值增加到10.
在这种情况下,为什么在反序列化时不返回它的原始值9,或者没有以正常方式创建类,类默认的int值为0,而不是保留它的非反序列化后-default递增值为10?我原本以为10的价值会丢失,但事实并非如此.
有人解散了吗?我在这里磕磕绊绊地盯着我的脚趾.
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |