2015-06-25 36 views
0

我通常會避免這樣做,但我偶爾偶爾會遇到一些代碼示例,我想知道。在其聲明中初始化一個變量會在每次調用它時重新創建一個變量?

比如你有這樣的:

private Object obj; 

public void someMethod() { 
    obj = new Object(); 
} 

,因此只當someMethod()被調用的對象將被初始化。

但是,如果變量聲明如下:

private Object obj = new Object(); 

後來當我使用obj變量的地方,將是種類的聲明使創建新實例每次它被引用?

+0

使用構造函數,而不是 – Hiru

+0

我相信這樣當調用構造函數變量將被自動初始化。 – Dragondraikk

+0

可以說這個類中沒有構造函數 – Borislav

回答

1

如果字段有一個初始化語句,將與該語句的準確值後,當創建實例初始化。換句話說,當你實例化一個類時,它的實例字段初始化程序和初始化程序塊會被運行,然後執行構造函數體。

訪問一個字段不觸發其字段初始化語句再次(如果事件有一個)。

+0

解釋簡單直接,謝謝 – Borislav

0

您使用(驚喜)'new'關鍵字創建一個新實例。 'new Object()'將調用Object()的構造函數並返回Object的新實例。對於所有(非抽象)類,即使沒有顯式構造函數的類都是如此,因爲每個類都有一個默認構造函數。

+0

,所以它只會在聲明ONCE時被初始化,而不是在以後只在代碼中的某個地方被引用? – Borislav

+1

@Borislav聲明'private Object obj'不創建實例。它只是聲明一個變量'obj',它準備好保存對'Object'類型的對象的引用。該實例僅在您使用'new'關鍵字實例化對象並將其分配給您的引用變量後纔會創建。然後您可以自由地使用您的變量來操作該對象。 – BoDidely

+0

我仍然不明白在執行這一行時會創建多少次'obj'實例 - 「private Object obj = new Object();」 – Borislav

相關問題