2012-03-12 27 views
1

我是Java新手,但在C++中經驗豐富。我碰到一些代碼,我不明白傳來:爲什麼用一個構造函數初始化類聲明中的某些變量?

public class SomeClass { 
    private SomeOtherClass someOther = new SomeOtherClass(); 
    private AThirdClass thirdClass; 

    SomeClass() { 
     this.thirdClass = new AThirdClass(); 
    } 
} 

爲什麼當只有一個構造函數,你將有一些其它的初始化和三級欄目在構造函數初始化初始化?

回答

1

以下是您可能希望這樣做的一個原因。

public class SomeClass { 
    private SomeOtherClass someOther = new SomeOtherClass(); 
    private AThirdClass thirdClass; 

    SomeClass(int x) { 
     this.thirdClass = new AThirdClass(x); 
    } 
} 

但這隻能解釋爲什麼你想在構造函數中初始化thirdClass。我無法解釋爲什麼你想在init塊中初始化someOther。

0

絕對沒有理由,除非你進入靜態聲明,在這種情況下,它可能是有道理的。

0

您的示例中沒有任何內容會提示原因,但底層實現可能存在問題且考慮得不好的代碼。在您的示例中初始化SomeOtherClass將始終在構造函數的初始化之前運行,這對您來說可能很重要。有人可能認爲這很重要。

或者,它可能只是兩個不同的開發人員,具有兩種不同的樣式偏好。兩者在技術上都不是錯誤的,但都有它們的(缺點)優勢。

相關問題