2011-04-05 171 views
2

最近,我發現一個數組可以初始化如下:初始化Java數組

private static int[] _array = new int[4]; 

// An arbitrary amount of code 

{ 
    _array[0] = 10; 
    _array[1] = 20; 
    _array[2] = 30; 
    _array[3] = 40; 
} 

什麼叫這種形式的初始化?它有什麼限制?

回答

3

這是使用initializer block進行實例成員初始化,它看起來很像靜態初始化,它將以static這個詞作爲前綴。

由於Java編譯器將初始化塊複製到每個構造函數中,因此它的限制將與任何構造函數的限制相匹配。因此,這種方法可以用來在多個構造函數之間共享一段代碼。

+3

另外值得一提的是,這似乎是一個非常危險方法初始化由** static **變量引用的數組。每次創建新實例時,數組的先前內容都將丟失,並重新初始化爲一組新值。如果這是可取的,那麼'_array'應該可能是一個實例成員。 – 2011-04-05 21:23:58

+0

@Mark Pardon我的好奇心,但是「成員初始化」和「靜態初始化」之間的區別僅僅是在每個構造函數中爲每個新實例調用成員初始化,而靜態初始化只被調用過一次? – 2011-04-05 21:31:11

+0

@ T.K。:從語義上講,類加載器每次加載類時都會運行一次靜態初始化程序。在大多數情況下,這隻意味着一次。 – 2011-04-05 21:32:41

1

這是初始化塊和關於對documentation

Java編譯器副本初始化 塊到每一個構造函數。 因此,這種方法可用於 共享的代碼 多個構造

我已經回答了昨天之間的塊類似的帖子here