最近,我發現一個數組可以初始化如下:初始化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;
}
什麼叫這種形式的初始化?它有什麼限制?
最近,我發現一個數組可以初始化如下:初始化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;
}
什麼叫這種形式的初始化?它有什麼限制?
這是使用initializer block進行實例成員初始化,它看起來很像靜態初始化,它將以static
這個詞作爲前綴。
由於Java編譯器將初始化塊複製到每個構造函數中,因此它的限制將與任何構造函數的限制相匹配。因此,這種方法可以用來在多個構造函數之間共享一段代碼。
另外值得一提的是,這似乎是一個非常危險方法初始化由** static **變量引用的數組。每次創建新實例時,數組的先前內容都將丟失,並重新初始化爲一組新值。如果這是可取的,那麼'_array'應該可能是一個實例成員。 – 2011-04-05 21:23:58
@Mark Pardon我的好奇心,但是「成員初始化」和「靜態初始化」之間的區別僅僅是在每個構造函數中爲每個新實例調用成員初始化,而靜態初始化只被調用過一次? – 2011-04-05 21:31:11
@ T.K。:從語義上講,類加載器每次加載類時都會運行一次靜態初始化程序。在大多數情況下,這隻意味着一次。 – 2011-04-05 21:32:41