黑马程序员技术交流社区
标题:
有哪位大神给说说这道题的解题思路
[打印本页]
作者:
刘凯旋
时间:
2014-3-18 15:21
标题:
有哪位大神给说说这道题的解题思路
本帖最后由 刘凯旋 于 2014-3-19 10:18 编辑
class X {
Y b = new Y();
X() {
System.out.print("X");
}
}
class Y {
Y() {
System.out.print("Y");
}
}
public class Demo7 extends X {
Y y = new Y();
Demo7() {
System.out.print("Z");
}
public static void main(String[] args) {
new Demo7();
}
}
打印结果是YXYZ,谁给讲讲为什么是这样的结果?
作者:
水蓝
时间:
2014-3-18 15:37
这种题目,楼主自己eclipse里面debug一遍就知道了。
只有两个可能算“难点”的地方:
1、子类构造函数默认第一行调用父类无参构造函数。
2、某个类new之后属性初始化完了之后,才调用构造函数。
作者:
无道
时间:
2014-3-18 15:49
十五,对象的初始化
Person p = new Person("zhang",21);
1,因为new用到了Person.class,所以会先找到person.class文件并加载到内存中
2,执行该类中的静态代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,对属性进行默认的初始化,
5,对属性进行显示初始化。
6,对属性进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。
1,在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();
2父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些
数据进行初始化的,所以子类在对象初始化时,要先访问一下父类中的构造函数。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2