站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题一个关于初始化的问题,很说明问题!请大家讨论一下!

一个关于初始化的问题,很说明问题!请大家讨论一下!

摘要: 一个关于初始化的问题,很说明问题!请大家讨论一下!


class X

{

Y b = new Y();

X()

{

System.out.print("X");

}

}

class Y

{

Y()

{

System.out.print("Y");

}

}

public class Z extends X

{

Y y = new Y();

Z()

{

System.out.print("Z");

}

public static void main(String[] args)

{

new Z();

}

}

请问输出结果是什么?为什么是这个结果!程序是怎么执行的??



是题太简单还是没人会啊 呵呵 怎么没人回应呢??


结果:YXYZ
因为子类初始化时先调用父类的构造方法。
顺序:Y->X->Y->Z


YXYZ
理由同上
Z 要先调用 X 的构造方法


up


输出 YXYZ
当运行这个java文件的时候,发生的第一件事情就是访问Z.main()方法,这时将寻找Z的Class文件,加载的过程中发现Z有一个基类将加载这个基类,不管你是否要产生该基类的对象,这都要发生,这里就是X,如果X还有基类,还要继续加载。 当必要的类都加载完了,就从最基类开始执行,之后是继承类,之后是继承类的继承类。。。
拿楼主的例子说,X将先被执行, Y b = new Y(); 创建一个Y的对象,这个多程中伴随new关键字, 将调用Y的构造器,输出Y. 接下来X顺序执行本身的构造器,输出X.
X执行完后,将执行它的直接继承类Z,输出与X同理。

不知楼主明白了吗。


YXYZ


这种基础题,一般教材里都有说明的



儿子在出生的时候总是要先有父亲的 没有父亲那来儿子 不知道比喻恰当不 呵呵

子类在new的时候总要先调度一下父类的构造方法

在生物学上应该解释为遗传吧, 不知楼主明白没


如果要加上两个static 类成员,效果会更好!


学习一下。


↑返回目录
前一篇: 学JAVA,掌握数据结构和算法的知识很重要吗?
后一篇: 讨论eclipse和jbuilder的优缺点,大家请进畅所欲言。