>>12
transient フィールドはデシリアライズ時には何も代入されない。
コンストラクタも呼ばれない。
初期値が書かれていたとしても、書かれていなかった場合と同じになる。
たとえ transient int x = 3; などと宣言されてても 0 になる。

初期化したければ

private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
in.defaultReadObject();
x = 1;
}

などというメソッドを書く。
private でどこからも呼んでないのに、なぜか呼ばれる不思議メソッド。