Ecco un programma di test molto semplice:L'oggetto deserializzato conserva i valori statici?
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) {
}
}
}
Ma io non capisco il motivo per cui la sua uscita è:
Result: 5 & -1
Result: 5 & -1
Poiché i membri statici non sono serializzati e quindi ottenere i valori di default mi aspettavo un'altra uscita :
Result: 5 & -1
Result: 0 & -1
In che modo l'oggetto deserializzato ha acquisito il valore di campo statico corretto?
Ho creato questa applicazione di test perché ho bisogno di serializzare alcuni oggetti con un numero di campi statici per fare copie profonde (e ovviamente, ho bisogno di essere sicuro che le copie abbiano gli stessi valori dei campi statici poiché sono usati come indici di array).
E ora sono assolutamente confuso su cosa succede dopo la deserializzazione. Da un lato, i membri statici non vengono serializzati ma, d'altro canto, come dimostra l'esempio, i membri statici conservano in qualche modo i loro valori. Sospetto che abbia qualcosa a che fare con la trasmissione di readObject()
sull'oggetto Body
ma non ne sono sicuro.
http://stackoverflow.com/questions/1008023/how-to-serialize-static-data-members-of-a-java-class – rkosegi