2012-07-09 91 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成员存在。