在序列化過程中靜態變量的值如何保持(如果全部持續存在)。我已經閱讀過堆棧中類似的問題,它說靜態變量本質上是暫態的,即它們的狀態或當前值沒有被序列化。java靜態變量序列化
我只是做了一個非常簡單的例子,我將一個類序列化並將其保存到一個文件中,然後再次從該文件重建該類。令人驚訝的是,我發現在發生序列化時靜態變量的值是保存。
這是怎麼發生的。這是因爲類模板及其實例信息在序列化期間被保存。這裏是代碼片段 -
public class ChildClass implements Serializable, Cloneable{
/**
*
*/
private static final long serialVersionUID = 5041762167843978459L;
private static int staticState;
int state = 0;
public ChildClass(int state){
this.state = state;
staticState = 10001;
}
public String toString() {
return "state" + state + " " + "static state " + staticState;
}
public static void setStaticState(int state) {
staticState = state;
}
,這裏是我的主類
public class TestRunner {
/**
* @param args
*/
public static void main(String[] args) {
new TestRunner().run();
}
public TestRunner() {
}
public void run() {
ChildClass c = new ChildClass(101);
ChildClass.setStaticState(999999);
FileOutputStream fo = null;
ObjectOutputStream os = null;
File file = new File("F:\\test");
try {
fo = new FileOutputStream(file);
os = new ObjectOutputStream(fo);
os.writeObject(c);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(null != os)os.close();
if(null != fo) fo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileInputStream fi = null;
ObjectInputStream ois = null;
ChildClass streamed;
try {
fi = new FileInputStream(file);
ois = new ObjectInputStream(fi);
Object o = ois.readObject();
if(o instanceof ChildClass){
streamed = (ChildClass)o;
//ChildClass cloned = streamed.clone();
System.out.println(streamed.toString());
}
} catch (IOException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(null != ois)ois.close();
if(null != fi) fi.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:有沒有錯的代碼。我只是想知道'ChildClass'類中的靜態變量'staticState'的值是如何保存的。如果我通過網絡傳輸這個序列化數據,狀態會被保存嗎?
[這個問題]的可能的複製(http://stackoverflow.com/questions/3147811/serialize-static-attributes-in-java)。我沒有「重複」這個問題,因爲我還不完全確定這是否合適。 –
儘管我的問題是關於靜態變量的序列化,但我的問題是關於一個行爲,我注意到,實際上不是按照標準文檔。 – Dibzmania