Oto bardzo prosty program testowy:Czy zserializowany obiekt zachowuje wartości statyczne?
public class Body implements Serializable {
static int bod = 5;
int dis = -1;
public void show(){
System.out.println("Result: " + bod + " & " + dis);
}
}
public class Testing {
public static void main(String[] args) {
Body theBody = new Body();
theBody.show();
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.dat"));
out.writeObject(theBody);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.dat"));
Body bodyDouble = (Body)in.readObject();
in.close();
bodyDouble.show();
} catch(IOException e) {
} catch(ClassNotFoundException e) {
}
}
}
Ale ja nie rozumiem, dlaczego jego wyjście jest:
Result: 5 & -1
Result: 5 & -1
Ponieważ członkowie statyczne nie są szeregowane i stąd dostać domyślne wartości Spodziewałem się innego wyjścia :
Result: 5 & -1
Result: 0 & -1
W jaki sposób zserializowany obiekt uzyskał prawidłową wartość pola statycznego?
Zrobiłem tę aplikację testową, ponieważ muszę serializować kilka obiektów z pewną liczbą pól statycznych, aby wykonać głębokie kopie (i oczywiście muszę mieć pewność, że kopie mają te same wartości pól statycznych ponieważ są używane jako wskaźniki tablicowe).
A teraz jestem całkowicie zdezorientowany, co dzieje się po deserializacji. Z jednej strony, statyczne elementy nie są serializowane, ale z drugiej strony, jak pokazuje przykład, statyczne elementy zachowują swoje wartości. Podejrzewam, że ma to coś wspólnego z odlewaniem readObject()
do obiektu Body
, ale nie jestem pewien.
http://stackoverflow.com/questions/1008023/how-to-serialize-static-data-members-of-a-java-class – rkosegi