只问耕耘
分类: Java
2009-11-30 17:04:58

public class Son extends Father
{
SonProp r = new SonProp();
public Son()
{
System.out.println("Son is construct");
}
public static void main(String[] args)
{
new Son();
}
}
class Father
{
FatherProp SonProp = new FatherProp();
public Father()
{
System.out.println("Father is construct");
}
}
class SonProp
{
public SonProp()
{
System.out.println("SonProp is construct");
}
}
class FatherProp
{
public FatherProp()
{
System.out.println("FatherProp is construct");
}
}执行结果如下:
FatherProp is construct
Father is construct
SonProp is construct
Son is construct
由此不难看出java类初始化时构造函数调用顺序:
(1)初始化对象的存储空间为零或null值;
(2)按顺序分别调用父类成员变量和实例成员变量的初始化表达式;
(3)调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)
(4)按顺序分别调用类成员变量和实例成员变量的初始化表达式;
(5)调用类本身构造函数。