對java中靜態初始化塊的理解

下面就是一個靜態塊:static { }  
靜態塊的特點是在類加載的時候就執行,先說一下類加載,一個程序要想運行,首先要把代碼加載到內存中對吧?然後才能去和CPU交流,這是馮諾依曼計算機規定的。Java也是一樣,java的.class字節碼文件要想執行,首先也要加載到內存,由類加載器把字節碼文件的代碼加載到內存中,這一步就叫類加載,這是首先要進行的。
public class Test {
static {
System.out.println("我是靜態塊");
}
}

當創建Test類的一個對象的時候,比如new Test() ,是這樣,首先是類加載,然後才能new對象,靜態塊在類加載的時候就執行了,這就說明靜態塊在new對象之前就會執行,而且一個類在第一次被使用的時候會被加載,然後在整個應用程序的生命週期當中不會再次被加載了,就加載這一次,所以這就說明,靜態塊就執行一次,不會執行第二遍!
public class Test {
public Test() {
System.out.println("我是構造方法,創建對象的時候我會執行,我執行完,對象就造出來了");
}
static {
System.out.println("我是靜態塊,類加載的時候我就執行了,而且只執行這一次");
}
}
然後這樣:
new Test();
new Test();
你會發現首先打印出靜態塊的信息,然後纔打印出構造方法信息,然後再次new Test();的時候,只打印出了構造方法的信息,這就是靜態塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章