有时,对JAVA实例化的顺序会忘记,现在记录一下。
1.调用<init>()方法
2.实现对实例变量的初始
3.构造方法体的代码
对于第一步,如果是是this的,这里就只有this与构造方法体的代码的,对于实例变量的初始,由调用的那个构造函数去实现了。
对于第一步不是this情况,则第一个为super的了(可以不写出来),后面的的第二步与第三步都是相同的。
用一个例子来记忆一下。
class father {
private int i = 12 ;
private String fatherstr = "F" ;
{
System.out.println("fffffffffffffffff") ;
}
public father(){
i = 22 ;
g() ;
System.out.println("father") ;
}
public void g(){
System.out.println("i="+i) ;
}
}
class son extends father{
private int j = 13 ;
private String sonStr = "s" ;
{
System.out.println("sssssssssssssss") ;
}
public son(){
g() ;
j = 33 ;
g() ;
System.out.println("son") ;
}
public void g(){
System.out.println("j="+j) ;
}
}
public class TestObject{
public static void main(String arg[]){
son s = new son() ;
}
}
执行结果为:
看看JVM是怎样去处里这个问题:
father类:
son类:
用son类来分析一下(father一样的),son()的构造方法中,编号为1的那个是调用father的构造方法;
7中是初始化son的实例变量
13中是初始化了sonStr
还有19后面执行了那个实例块
当初始化结束后,运行g()的调用,这个是从25号开始。。。。