假设有个Dog类
一个例子:
package 概念题;
/**
* @author hwy1782@gmail.com
* @creation date 2010-9-11 下午03:48:15
*
*/
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();
}
}
在 Z 这个类中没有静态的方法和静态域,直到遇到new Z(),才会发生初始化。因为 z 继承自 x,所以在new z 这个对象之前,需要先初始化 x 这个对象。即调用 new x()这个方法。
new x() 的步骤如上图所示:
1. 在堆上为x分配足够的空间。
2. 存储空间上的值被清零。(基本类型为默认值,引用为null)(即此处,x 的成员变量 y 的引用为 null)
3. 执行所有出现于字段定义处的初始化动作。(即此处为: y = new y() )。
4. 执行构造器。(即执行 x = new x() )。
对 Z 这个类的操作类似于 Z 。
故本例结果为:
y x y z