2012-04-16 44 views
4

如果我在構造函數外初始化一個成員變量,成員什麼時候實際被初始化?它是否保證爲該類的所有可能的構造函數初始化?Java:構造函數之外的成員初始化總是保證被調用?

public class MyClass 
{ 
    private String myName = "MyClass"; 

    public MyClass(int constructor1Arg) 
    {} 

    public MyClass(int constructor2Arg1, int constructor2Arg2) 
    {} 
} 
+8

是的,如果沒有異常,而對象 – 2012-04-16 17:28:40

+0

的創作也見http://docs.oracle.com/javase/教程/ JAVA/javaOO/initial.html。 – 2012-04-16 17:34:02

回答

15

是。在 superconstructor已執行後,所有實例變量初始值設定項執行,但在之前執行這個類中聲明的任何構造函數的主體。

(作爲Jigar喬希提到,這是假設超類將正常執行)

3

是的,如果沒有異常,而創建對象的

3

根據Java語言規範:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

實例變量之前被初始化構造是除非任何以前的初始化拋出錯誤:

爲該類執行實例初始化程序和實例變量初始值設定項,將實例變量初始值設定項的值分配給相應的實例變量,並按照從左到右的順序將它們以文本形式顯示在類的源代碼中。如果執行這些初始化程序中的任何一個都會導致異常,則不會執行進一步的初始化程序,並且此過程突然以相同的異常完成。否則,繼續執行步驟5

(第5步運行構造函數)

相關問題