一個類中執行順序:

靜態變數
靜態程式碼塊
程式碼塊
構造方法

子類和父類執行順序:

父類靜態變數
父類靜態程式碼塊
子類靜態變數
子類靜態程式碼塊
父類程式碼塊
父類構造方法
子類程式碼塊
子類構造方法

直接看程式碼,一目瞭然。

public class Test {

    public static void main(String[] args) {
new A();
/* 結果:
* A靜態變數
A靜態程式碼塊
A程式碼塊
A構造方法
* */
new B();
/*
* 結果:
* A靜態變數
A靜態程式碼塊
B靜態變數
B靜態程式碼塊
A程式碼塊
A構造方法
B程式碼塊
B構造方法
* */
} }
class A{
static C c =new C("A");
{
System.out.println("A程式碼塊");
}
static {
System.out.println("A靜態程式碼塊");
}
public A(){
System.out.println("A構造方法");
}
} class B extends A{
static C c =new C("B");
{
System.out.println("B程式碼塊");
}
static {
System.out.println("B靜態程式碼塊");
}
public B(){
System.out.println("B構造方法");
} } class C {
public C(String str){
System.out.println(str+"靜態變數");
}
}