请教一个JAVA基础问题

yzj123 2010-02-27 05:21:47
class X{
Y b = new Y();
X(){
System.out.println("X");
}
}
class Y{
Y(){
System.out.println("Y");
}
}

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

new Z();
}
}
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
meadking 2010-02-27
  • 打赏
  • 举报
回复
上面是初始化顺序.
希望对你有用
meadking 2010-02-27
  • 打赏
  • 举报
回复


class X {
Y b = new Y();//9这里是成员变量初始化
static Y sb= new Y();//2父类静态变量,输出static Y(静态代码块先初始化),Y

static{
System.out.println("static X父类静态代码块");//3执行静态代码块
new Y();//4这里只是输出Y,,,没有static Y(静态代码块只执行一次)
}
X() {//8父类构造,完成后执行9成员变量初始化
System.out.println("X");//成员变量初始化之后,执行构造器输出X
}
}

class Y {
static{
System.out.println("static Y");
}
Y() {//5执行构造函数
//这里有个super()==Object()
System.out.println("Y");//5输出Y
}
}

public class Z extends X {
final static int mead=45;
final byte b=16;
static Y sb= new Y();//静态变量1
static{
System.out.println("static Z");//6执行静态代码块
}
Y y = new Y();
Z() {
//7这里有super()==new X()
this.y = null;
System.out.println("Z");
}

public static void main(String[] args) {
new Z();//7到主函数的构造器
}
}


虽然很变态,但是看看对面试有帮助,呵呵
楼主可以用调试debug来试验.
1,父类:final变量
2,父类:静态变量
3,当前类final变量
4,当前类static变量
5,入口main
6初始化类,先执行super()父类的的构造函数(fianl和static完了之后),父类的构造函数先执行super()直到object,
7,super()完了执行一般成员变量的初始化
8,一般成员变量初始化完毕,执行构造器里面的代码(super()之后的代码).
9父类的初始化完成后(子类构造器里面super执行完毕),才轮到子类的成员变量初始化
10,子类成员变量初始化完毕,开始执行子类构造器里面的代码(super()之后的代码).
是非常乱,呵呵
建议楼主跟踪调试一下,如果继承多了,静态代码块多了,确实非常有难度,呵呵
我自己都晕乎晕乎了
djh6011 2010-02-27
  • 打赏
  • 举报
回复
呵呵 ,是在new对象的时候就调用构造函数的
u_xtian 2010-02-27
  • 打赏
  • 举报
回复
引用 4 楼 yzj123 的回复:
我试了下  结果却是如您所说。
可是我不知道为什么?
构造函数的作用是对属性初始化。可是X的构造函数里没有调用Y,为什么是先调用了Y的构造函数呢?
多谢!!

在X的构造函数前不是通过 Y b = new Y(); 这样new了Y了吗?只要new了Y就调用了Y的构造函数啦
yzj123 2010-02-27
  • 打赏
  • 举报
回复
我试了下 结果却是如您所说。
可是我不知道为什么?
构造函数的作用是对属性初始化。可是X的构造函数里没有调用Y,为什么是先调用了Y的构造函数呢?
多谢!!
Defonds 2010-02-27
  • 打赏
  • 举报
回复
打印结果是:
Y
X
Y
Z
你要问什么?
TillPerfect 2010-02-27
  • 打赏
  • 举报
回复
请问,问题是什么? 。
xiaoguan_Java 2010-02-27
  • 打赏
  • 举报
回复
ding.........

62,569

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告