6

我有以下代码。

class X {
    X(){
        super();
        System.out.println("X()");
    }
}

class Y extends X {
    Y(){
        super();
        System.out.println("Y()");
    }
}

class Z extends Y {
    Z(){
        super();
        System.out.println("Z()");
    }

    public static void main(String args[]){

        Z z1 = new Z();
    }
}

我得到了输出

X()
Y()
Z()

一切都好。是这样的,应该是这样的。当我在 Z 类中创建 X() 的静态对象时,如下所示

class X {
    X(){
        super();
        System.out.println("X()");
    }
}

class Y extends X {
    Y(){
        super();
        System.out.println("Y()");
    }
}

class Z extends Y {
    static X x1 = new X();
    Z(){
        super();
        System.out.println("Z()");
    }   

    public static void main(String args[]){

        Z z1 = new Z();
    }
}

X()
X()
Y()
Z()

输出没问题,因为静态实例首先加载到 RAM 中。但是当我像这样制作静态对象实例时

X x1 = new X();

我得到以下输出

X()
Y()
X()
Z()

这真的让我很困惑。据我所知,我应该得到以下输出

X()
Y()
Z()
X()

首先将实例化 Z 对象,最后实例化 X 对象。在这种情况下,它在第三个实例化。这是为什么?有什么特殊的概念适用于此吗?

4

0 回答 0