静态变量能够被序列化吗?
我们先定义一个类,定义一个静态变量 staticVar = 5,将它被序列化后,再把 Static Var 设置成10,最后反序列化后得出的对象的staticVar 是5还是10呢?
代码如下:
public class StaticSerializableTest implements Serializable {
public static int static Var = 5;
@ Override
public String toString() {
return " staticVar = " + staticVar;
}
public static void main(String[] args) throws IOException, ClassNotFoundException {
StaticSerializableTest test = new StaticSerializableTest();
serializeStaticSerializableTest(test);
// 修改为10
StaticSerializableTest.staticVar = 10;
StaticSerializableTest test2 = deserializeStaticSerializableTest();
System.out.println(test2);
}
public static void serializeStaticSerializableTest(StaticSerializableTest t) throws IOException {
ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream("d://static.txt"));
oo.writeObject(t);
System.out.println("StaticSerializableTest 序列化 成功");
oo.close();
}
public static StaticSerializableTest deserializeStaticSerializableTest() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d://static.txt"));
return (StaticSerializableTest) ois.readObject();
}
}
得到的结果时: staticVar = 10;
为什么会等于10呢?
之所以打印10 , 是因为 在 序列化 的时候,并不保存静态变量,因为序列化保存的是对象状态,而static变量时属于类的状态,因此 序列化并不保存静态变量 。