本帖最后由 HM朱俊 于 2013-4-4 13:01 编辑
- class X
- {
- Y b1 = new Y(1);
- X()
- {
- System.out.print("2");
- }
- }
- class Y
- {
- Y(int y)
- {
- System.out.print(y);
- }
- }
- public class Z extends X
- {
- Y y = new Y(3);
- Z()
- {
- super();
- System.out.print("4");
- }
- public static void main(String[] args)
- {
- new Z();
- }
- }
复制代码 输出结果是1234 说明程序运行的时候是这样的 先读Z中的main方法,创建Z对象的时候先走Z的构造函数初始化,Z是X的子类,所以Z的构造函数中有句隐式的super()语句,这时就要先走X的构造函数 而在X函数中,构造函数前有个成员变量是Y类的对象,从答案开来是先存入了Y的对象,然后才是X的构造函数初始化。然后又是Z类中的成员Y的对象走在Z的构造函数之前,还是很疑惑。
之前也有人问过这个问题,地址是http://bbs.itheima.com/thread-39545-1-1.html ,答案是YXYZ,看下面的解答都说是先加载了Z中的Y对象然后才是X中的X和Y。其中两个Y不清楚是哪个类的,所以我改为了数字,来判断执行的顺序。 求指点 |
|