当前页面: 开发资料首页 → 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 类成员,效果会更好!
学习一下。