本帖最后由 任江峰 于 2013-5-13 22:40 编辑
类的实例化过程:
1,加载.class类文件。
2,执行static静态代码块,如果有的话。
3,开辟内存空间,分配内存地址。
4,创建对象特有的属性,执行默认初始化。
5,对对象的属性执行显示初始化。
6,执行构造代码块。
7,执行构造函数。
8,new表达式返回对象引用。
这里的new Z();
由于Z类继承X类,加载Z类之前会加载X类。加载X类的过程:
执行第4步,创建对象特有的属性,执行默认初始化。 Y b =null;
执行第5步,对对象的属性执行显示初始化。 b= new Y();//new Y的对象会执行Y的构造函数,输出"Y"
执行第7步,执行本类的构造函数。 执行X类的构造函数,输出"X"
然后会加载Z类,加载Z类的过程:
执行第4步,创建对象特有的属性,执行默认初始化 Y b =null;
执行第5步, 对对象的属性执行显示初始化。 b= new Y();//new Y的对象会执行Y的构造函数,输出"Y "
执行第7步, 执行本类的构造函数。 执行Z类的构造函数,输出"Z"
所以最终的输出结果是:"YXYZ"
|