2012-04-26 136 views
1

哪個更好或哪個是正確的方式來做到這一點,你也可以給解釋(我不知道在Google上使用什麼搜索詞)。將變量初始化爲類或構造函數?

第一種方式:

Public Class A() 
{ 
    Paint _paint _test; 

    public void running() 
    { 
     _test = new Paint(); 
     //use paint 
    } 
} 

OR

Public Class B() 
{ 
    Paint _paint _test = new Paint(); 

    public void running() 
    { 
     //use paint 
    } 
} 

感謝

+1

除了2個都不會編譯的事實之外,兩者都是有效的,答案取決於上下文以及您試圖實現的目標。 – assylias 2012-04-26 20:25:05

+0

[我應該初始化構造函數或外部構造函數中的變量](http://stackoverflow.com/questions/3918578/should-i-initialize-variable-within-constructor-or-outside-constructor)。 – Lion 2012-04-26 20:29:57

回答

4

第一種方式是更好,當你可能(也許在未來)可能想傳遞參數給成員的構造函數,例如:

class Foo{ 
    private Bar bar; 

    public Foo(){ 
     bar = new Bar(); 
    } 

    public Foo(String s){ 
     bar = new Bar(s); 
    } 
} 

第二種方式是更好的,當你知道你將永遠都不想參數傳遞給成員的構造函數,你有多個構造,所有需要初始化這個成員,如:

class Foo { 
    private Bar bar = new Bar(); 

    public Foo(String s){ ... } 
    public Foo(int i){ ... } 
    public Foo(double d){ ... } 
    public Foo(String s, int i){ ... } 
} 
-1

最好是初始化使用之前它。只初始化構造函數中始終需要/使用的變量。

+0

那麼?變量的我初始化總是使用,雖然所以類A更好? – 2012-04-26 20:26:55

+0

讓我們舉一個服務類和dao類的例子。 dao類在服務類中是必需的,並且不依賴於構造函數參數,所以最好將它初始化爲classB。如果一個配置參數需要根據構造函數參數進行初始化,那麼遵循classB的方法。如果在一個processng中使用了一個ArrayList,最好在該方法內部使用它之前進行初始化。 – 2012-04-26 20:31:53

+0

-1。實例成員總是被使用,否則應該被刪除。初始化和構造的全部目的是使對象進入可用狀態。您的註釋適用於方法中的局部變量,但最好說明爲'最好在使用之前聲明*'。 – EJP 2012-04-27 00:12:58

0

答案是「這取決於」。在你已經說明的情況下,使用第二個選項可能更優雅。但是,如果一個值需要知道構造函數參數的值,或者以任何方式修改該類的構造,它可能應該在構造函數中初始化。如果一個成員可以在其聲明中初始化,它應該是。這將防止在分配類時需要將它們初始化爲0或Null。