【发布时间】:2014-01-24 16:12:46
【问题描述】:
public class Test {
int value = 100;
public Test() {
}
}
和
public class Test {
int value;
public Test() {
value = 100;
}
}
是等价的,对吧?有什么理由让我更喜欢做一个而不是另一个?显然,如果构造函数采用稍后给字段的参数是一个原因:
public class Test {
int value;
public Test(int value) {
this.value = value;
}
}
或者我可能需要做一些特殊的计算。
但如果我不这样做,还有其他好的理由吗?
【问题讨论】:
-
这些是字段,而不是属性。
-
必须仔细考虑您的范围。
-
在执行构造函数的主体之前初始化字段。如果您需要在构造函数中泄漏
this引用(不要,但如果需要),最好在其声明中而不是在构造函数中初始化该字段,以便获得引用的人不会看不到完全未初始化的状态。 -
看看这两种情况的字节码,也许你会发现一些相似之处。 :)
-
出于风格问题,我总是在构造函数中初始化变量。我在构造函数的 JavaDoc 中记录了初始值,因此实际上将它们分配在那里。将初始值放在构造函数中记录的顶部对我来说并不合适。
标签: java