日期:2014-05-20  浏览次数:20741 次

请问这个程序的执行结果?我已经运行了,结果是YXYZ,谁能解释一下为什么?就是程序的过程。
本帖最后由 u014246256 于 2014-04-01 23:33:09 编辑
package com;

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

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

public class Demo8 extends X{
Y y = new Y();
Demo8(){
System.out.print("Z");
}
public static void main(String[] args){
new Demo8();
}
}

我的目前理解程度:main函数里 new 一个Demo8的对象后;Demo8这个类的构造函数执行,但先执行父类X的构造函数,一次先打印X ,再打印Z。但是 那两个 new的y对象什么时候执行啊
------解决方案--------------------
 b是X类的成员,所以先于X实例创建,y是demo8的 成员,所以先于demo8实例创建
------解决方案--------------------
执行构造函数之前会初始化这个类那个时候就会调用Y b = new Y();
------解决方案--------------------
请参考如下,里面说的很清楚了。
http://blog.csdn.net/zhangerqing/article/details/8294039
------解决方案--------------------
Output:YXYZ
在创建Demo8对象的时候,首先判断继承的X不是虚基类,那么就要先构建X,Y作为成员产生输出Y。
接着进入X的构造函数,输出X
然后Y作为Demo8的成员,产生输出Y
最后是Demo8的构造函数输出Z