首页 > 技术文章 > java变量与构造器初始顺序

ChanSS 2017-03-20 17:00 原文

刚看到的一道面试题

public class Constructs {
    public static void main(String[] args) {
    new Z();
    }
}

class X{
    Y b = new Y();
    X(){
        System.out.println("X");
    }
}

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

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


输出结果是

Y
X
Y
Z

解析:

当new Z();的时候,因为Z继承自X,所以会先构造X,进入X类先初始化全局变量,所以运行Y b = new Y();,调用Y的构造函数输出“Y”,

然后执行X的构造函数,输出“X”,构造完X后,会构造Y,先初始化Z的全局变量,执行Y y = new Y();,调用Y的构造函数输出“Y”,最后调用Z的构造函数输出“Z”

推荐阅读