java – 当我运行给定的代码时,我得到A B A作为输出.我不明白为什么它再次打印A.

下面提到的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.

上一篇:熟悉框架_聚宽


下一篇:深复制工具类