2012-07-09 68 views
-1

哪裏更好地初始化字段?在構造函數(var.1)聲明(var.2)哪裏更好地初始化字段?

var。 1個

public class UtilWebLoading { 
private int data; 
private Context context; 

public UtilWebLoading(Context context) { 
    this.context = context; 
    data = 100; 
} 
... 
} 

變種。 2

public class UtilWebLoading { 
private int data = 100; 
private Context context; 

public UtilWebLoading(Context context) { 
    this.context = context; 
} 
... 
} 
+0

我認爲你應該尋找一個更好的例子,例如一個沒有構造函數參數的列表成員,因爲在這種情況下沒有真正的選擇,因爲例子2是錯誤的。 – Tudor 2012-07-09 13:19:28

+2

[最佳實踐:初始化構造函數或聲明中的類字段?]的可能重複?(http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at-declaration ) – 2012-07-09 13:20:37

回答

13

In var。 1上下文已經啓動,而在var。 2它將是空的! 使用第一個。

+0

那麼,變種。 2甚至不會運行。 – Keppil 2012-07-09 13:27:38

+0

它不會運行,但是如果他將上下文上下文放置在var 2的Util頂部,它將運行,但是具有空值。 – Carnal 2012-07-09 13:29:59

4

我個人更喜歡初始化字段,當我有足夠的上下文這樣做。例如,如果我有一個List字段,我通常在聲明時初始化它(除非類需要用戶傳遞他們選擇的實現),但是如果我有一個需要傳遞大小的數組,我必須等待構造函數調用。

因此,在你的情況下,第二片斷沒有足夠的背景下初始化Util在聲明中,因爲沒有有效的Context成員存在。