標籤:java 靜態代碼塊
靜態代碼塊
class StaticCode{ static { System.out.println("a"); }}public class Demo { static { System.out.println("b"); } public static void main(String[] args) { new StaticCode(); new StaticCode(); System.out.println("end"); } static { System.out.println("c"); } }
輸出結果為:
b
c
a <==雖然有兩個調用StaticCode的語句,但是因為其中只包含靜態代碼塊,而靜態代碼塊只執行
一次,所以只輸出一個a
end
只有涉及到類中的內容的時候,類才會載入,靜態代碼塊才會執行
StaticCode m = null; <==類沒有被載入
s = new StaticCode(); <==類被載入了,因為用到了類中的建構函式StaticCode(),所以靜態代碼塊
會被執行
所以判斷一個類有沒有被載入,可以用靜態代碼塊來驗證
class StaticCode{ StaticCode() { System.out.println("c"); } static { System.out.println("a"); I } { System.out.println("b"); II } StaticCode(int x) { System.out.println("hah"); III } public static void test() { System.out.println("succeed"); }}public class Demo { public static void main(String[] args) { new StaticCode(5); } }
I ----- 靜態代碼塊給類進行初始化
II ----- 構造代碼塊給對象進行初始化
III ----- 建構函式給對應對象進行初始化
輸出結果:
a
b
hah
注意:靜態代碼塊只可以訪問靜態變數
構造代碼塊可以訪問到
【java】靜態代碼塊