2014-03-01 50 views
-1

考慮一下:什麼時候靜態字段內聯初始化發生

Class A 
{ 
    private static B b = new B(); 
    private static C c; 

    static 
    { 
    c= new C(); 
    } 
} 
  1. 是發生在類負載的b初始化?
  2. 初始化時出現同樣的問題c
  3. 發生了什麼事情bc第一次初始化?
    請給我一個關於是否存在這個問題,Java文檔的參考。

由於

+0

沒有發現它,看到它對於這樣肯定這將是很好,如果我有一些參考吧 – JavaSa

+3

不同的答案,我只是搜查谷歌「什麼時候靜態字段內聯初始化發生的Java」,而這正是你的標題+ java,並發現了一個***絕對寶藏的信息。 – aliteralmind

+1

什麼是最明顯的實施/訂單,你爲什麼期望它不是? –

回答

0

與靜態修飾符的碼塊表示一個類初始化器;沒有靜態修飾符,代碼塊就是一個實例初始化器。

靜態初始化在它們被定義的順序執行(自上而下的,就像簡單變量初始化)被加載的類時(實際上,當它解決了,但是這是一個技術性問題)。

實例初始化在當類被實例化所定義的順序執行時,立即之前執行構造代碼,超級構造函數的調用之後立即。

static block