Dalla guida SCJP 6 di studio - non v'è una domanda per chiedere l'uscita del seguente codice in materia di serializzazione:variabili di classe statiche e serializzazione/deserializzazione
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;
}
L'output di questo è: 10 0 10
La ragione fornita per questo è che la variabile statica z non è serializzata, cosa che non mi sarei aspettato che fosse.
Il valore della variabile statica int z è incrementato a 10 dopo che l'oggetto è stato scritto nel file, nell'istruzione println().
In questo caso, perché non è tornato al valore originale di 9 quando la classe è deserializzata, o come la classe non viene creata nel modo normale, il valore int predefinito di classe di 0, piuttosto che rimanendo con il suo valore incrementale non predefinito di 10 dopo la deserializzazione? Avrei pensato che il valore di esso sarebbe stato perso, ma non è questo il caso.
Qualcuno fa luce? Sto incespicando da queste parti nell'oscurità oscurando le dita dei piedi su questo ..
Aaahh .. ah sì, naturalmente - la classe stessa rimane caricata anche se non vi sono istanze di esso. Oh sì - quindi ora ha perfettamente senso. Grazie molto! :-) –