最近一直在执拗于一个问题,那就是一个java对象从创建到使用之间,虚拟机是如何初始化其属性的,简单在开发环境里创建了一个简单的测试例子:
public class ParentClass{
public ParentClass(){
System.out.println("childVar=" + ((ChildClass)this).childVar);
}
}
public class ChildClass extends ParentClass{
public int childVar = 10;
public ChildClass(){
System.out.println("childVar=" + childVar);
childVar = 20;
}
}
public class TestVar{
public static void main(String [] args){
ChildClass child = new ChildClass();
System.out.println("childVar=" + child.childVar);
}
}
执行上面的测试,发现结果输出:
childVar=0
childVar=10
childVar=20
很明显,一个java对象的初始化过程如下:
(1)调用ChildClass的构造方法,发现该类有基类,于是转(2)
(2)调用ParentClass的构造方法,发现该类的基类为Object,转(3)
(3)初始化ParentClass的成员变量,发现没有成员变量,于是构造方法继续执行,输出childVar=0,构造方法结束,转(4)
(4)初始化ChildClass的成员变量,此时childVar=10,构造方法继续执行,输出childVar=10,进而赋值childVar=20,构造方法结束,转(5)
(5)执行main方法,输出childVar=20