之前一致沒有認真研究這個問題,今天在研究JAVA類加載順序時突然想好好地研究研究。實驗總結如下:
step 1.父類的靜態成員和靜態塊(靜態變量和靜態塊屬同一級,自上而下執行)
step 2.子類的靜態成員和靜態塊(靜態變量和靜態塊屬同一級,自上而下執行)
step 3.父類的成員賦值和初始化塊和無static 的final成員成員 (同一級,自上而下執行)
step 4.父類的構造方法
step 5.父類構造方法中的其它語句
step 6.子類的成員賦值和初始化塊和無static 的final成員成員(同一級,自上而下執行)
step 7.子類的構造方法
step 8.子類構造方法中的其它語句
eg.
public class Test3 {
public
Test3(int num){
System.out.println("Test3構造方法:"+num);
}
}
public class Test1 {
publicstatic Test3 test3=new Test3(5);
public Test3
test4=new Test3(6);
static{
System.out.println("static Test1");
}
{
System.out.println("no static Test1 ");
}
public
Test1(){
System.out.println("Test1構造方法");
}
}
public class Test2 extends Test1
{static{
System.out.println("static Test2");
}
{
System.out.println(" no static Test2");
}
private
Test3 test4=new Test3(4);
private
static Test3 test3=new Test3(3);
public
Test2(){
System.out.println("Test2構造方法");
}
public
static void main(String[] args){
Test2 test2=new Test2();
}
}
執行結果:
Test3構造方法:5
static Test1
static Test2
Test3構造方法:3
Test3構造方法:6
no static Test1
Test1構造方法
no static Test2
Test3構造方法:4