下面提到的Tha代码返回
一个
乙
一个
作为输出,但我不明白为什么A在B之后再次打印的逻辑.
class A1 {
public A1() {
System.out.println("A");
}
}
class B extends A1 implements Serializable {
public B() {
System.out.println("B");
}
}
public class Test {
public static void main(String... args) throws Exception {
B b = new B(); // Object of class B
ObjectOutputStream objout=new ObjectOutputStream(new FileOutputStream("t.txt"));
objout.writeObject(b);
ObjectInputStream objin=new ObjectInputStream(new FileInputStream("t.txt"));
objin.readObject();
}
}
解决方法:
这解释了它,B的ctor没有被再次调用,因为它是可序列化的.
Reading an object is analogous to running the constructors of a new object. Memory is allocated for the object and initialized to zero (NULL). No-arg constructors are invoked for the non-serializable classes.
当你调用新的B()时会打印一个B,它首先调用A的ctor然后调用B.
然后objin.readObject()只调用A的ctor并打印第二个A.