无法弄清楚代码执行顺序

时间:2015-05-21 14:12:36

标签: java instance language-concepts

我有以下代码。

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对象。在这种情况下,它在第三个实例化。这是为什么?这里有适用的特殊概念吗?

0 个答案:

没有答案