類的初始化和物件的初始化
類的初始化格式:static{<--系列語句>}
當java程式執行時,需要某個類,但該類還沒有裝入記憶體,則java將類裝入記憶體,然後立即執行類中定義的類初始化塊,執行次序就是類初始化塊定義的次序。
public class Test{
static {System.out.println("Hello");}
}
程式執行的結果如下:
Hello
Exception in thread "main"java.lang.NoSuchMethosError:main
物件的初始化格式:{<--系列語句>}
當java程式執行時,需要某個類,但該類還沒有裝入記憶體,則java將類裝入記憶體,然後立即執行類中定義的類初始化塊,執行次序就是類初始化塊定義的次序,然後執行物件初始化塊,執行次序是定義的次序,最後執行類的建構函式,繼續對物件進行初始化。
class A{
public A(){System.out.println("A的建構函式");}
{System.out.println("A的動態初始化塊");}
static {System.out.println("A的靜態初始化塊");}
}
class B extends A{
public B(){System.out.println("B的建構函式");}
{System.out.println("B的動態初始化塊");}
static {System.out.println("B的靜態初始化塊");}
}
public class Test4{
public static void main(String[] args){
System.out.println("第一次生成類B的物件時輸出:");
new B();
System.out.println("第二次生成類B的物件時輸出:");
new B();
}
}
程式執行結果如下:
第一次生成類B的物件時輸出:
A的靜態初始化塊
B的靜態初始化塊
A的動態初始化塊
A的建構函式
B的動態初始化塊
B的建構函式
第二次生成類B的物件時輸出:
A的動態初始化塊
A的建構函式
B的動態初始化塊
B的建構函式