問題:Java里面的靜態代碼塊
I was looking over some code the other day and I came across:
前幾天我在看一些代碼時發現:
static {...
}
我是c++轉來的,我不知道為啥要這樣干。這個代碼也編譯成功了,沒出錯誤。這里的"static"代碼塊是啥啊?
回答一
它是一個靜態初始化器。它在類被加載時執行(準確地說應該是初始化,但你通常不會注意到其中的區別)。
它也可以被看成是一個“類的構造函數”。
請注意,還有一些實例初始化器,它們看起來相同,但是它們沒有static關鍵字。當創建對象的實例時,除了構造函數中的代碼外,還會運行這些代碼。
回答二
它是一個靜態初始化器。它在類加載時執行和是進行靜態變量初始化的地方。
來自http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html
一個類可以有任意數量的靜態初始化塊,它們可以出現在類的任何地方。系統保證在運行時靜態初始化的代碼塊按照它們在源代碼中出現的順序被調用。
如果你有一個類,帶有實現了查找功能的靜態的map,它看起來就是這樣的:
class MyClass {static Map<Double, String> labels;static {labels = new HashMap<Double, String>();labels.put(5.5, "five and a half");labels.put(7.1, "seven point 1");}//...
}
它是非常有用的。因為上面的靜態域不能使用labels = … 來初始化,它需要以某種方式調用put方法。
文章翻譯自Stack Overflow:https://stackoverflow.com/questions/2943556/static-block-in-java