- 直列化に関する以下のコードの出力を尋ねる質問があります:静的クラス変数とSCJP 6研究ガイドからシリアライズ/デシリアライゼーションの
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;
}
これの出力は次のとおりです。10 0 10
これは、静的変数zがシリアル化されていないことが原因であると考えられています。
オブジェクトがファイルに書き込まれた後、println()ステートメントでstatic int変数zの値が10に増えます。
この場合、クラスが逆シリアル化されたときに元の値9に戻らないのはなぜか、またはクラスが通常の方法で作成されないため、クラスのデフォルトのint値は0デシリアライズ後にデフォルト以外のインクリメント値10が残っていますか?私は10という値が失われると思っていたでしょうが、そうではありません。
誰かが何か光を放つのですか?私は暗闇の中でここにつまずいています。
Aaahhのこの
をやったかのようにそれはもちろんそうああ...だ - クラス自体は、それのインスタンスがない場合でも、ロードされたままになります。ああ、はい、今は完璧な意味があります。どうもありがとう! :-) –