SCJP6学習ガイドから-シリアル化に関する次のコードの出力を求める質問があります。
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;
}
これの出力は次のとおりです。10010
この理由は、静的変数zがシリアル化されていないためです。これは、私が予想していなかったことです。
静的int変数zの値は、オブジェクトがファイルに書き込まれた後、println()ステートメントで10にインクリメントされます。
この場合、クラスが逆シリアル化されたときに元の値の9に戻らないのはなぜですか、またはクラスが通常の方法で作成されていないため、クラスのデフォルトのint値は0のままではなく、 -逆シリアル化後のデフォルトの増分値は10ですか?10であるという価値は失われると思っていたでしょうが、そうではありません。
誰かが光を当てますか?私はこれに私のつま先を突き刺している暗闇の中でこの辺りでつまずきます。