靜態初始化器是由關鍵字static引導的一對大括號括起的語句組。作用是:在加載時,初始化類的靜態域。如有多個static{}程序段,則在類的初始化時,會依次執行。
與構造函數相同,他們都是用來完成初始化的工作,但是靜態初始化器與構造函數有三點不同:
①構造函數是對每個新創建的對象初始化,而靜態初始化器是對類自身進行初始化。
②構造函數是在用new運算符產生新對象時由系統自動執行,而靜態初始化器則是在它所屬的類加載到內存時由系統調用執行。
③不同於構造函數,靜態初始化器不是方法,沒有方法名、返回值和參數列表。
優點:
當類有一些靜態變量,同時不能用一行代碼解決初始化時,可以使用這個方法。而不是建一個initial方法,每次new的時候都調用一次。
代碼樣例:
class Person {
private static final Date BOOM_START;
static {
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0);
BOOM_START = gmtCal.getTime();
}
}