微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

请问这个程序的执行结果?我已经运行了,结果

时间:2014-04-03 23:15  浏览:努力统计中...
packagecom; classX{ Yb=newY(); X(){ System.out.print( X ); } } classY{ Y(){ System.out.print( Y ); } } publicclassDemo8extendsX{ Yy=newY(); Demo8(){ System.out.print( Z ); } publicstaticvoidmain(String[]args){ newDemo8(); } } 我的目前理解
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对象什么时候执行啊

java的上溯

只是一个顺序吧先执行了extend中x中的y然后x中的x 然后是y最后是z

 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

各位真不好意思,这几天有点事,回复的比较晚,感谢大家的解答。

真的很有用,谢谢了。
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------