在类定义的开头或构造函数中初始化成员变量?
定义和初始化类定义和中的成员变量,并首先定义成员变量并初始化构造函数中的成员变量?在类定义的开头或构造函数中初始化成员变量?
说,例如:
public class Test {
private int foo = 123;
private boolean flag = false;
public void fooMethod() {...}
}
对战:提前
public class Test {
private int foo;
private boolean flag;
public Test() {
foo = 123;
flag = false;
}
public void fooMethod() {...}
}
感谢。
在你的例子中,唯一的区别是当它们被初始化时。根据JLS,实例变量在构造函数被调用之前被初始化。当你有超级类来处理时,这会变得很有趣,因为初始化顺序并不总是那么明显。因此,请记住,当没有显式超级构造函数被调用时,“超级”实例变量仍将被初始化。
+1我想象一下引入各种难以置信的错误追踪...... –
区别在于它们的初始化/设置顺序。
您的类成员变量将在您的构造函数被调用之前被声明/设置。我个人的偏好是在构造函数中设置它们。
通常构造函数将接受参数并将这些参数分配给类的字段。
public Test(int foo, boolean flag)
{
this.foo = foo;
this.flag = flag;
}
不确定你的意思? –
@aib,它是Java,而不是C++。 – Triang3l
类内初始化允许您避免编写一个简单的构造函数。
您必须在构造函数中初始化依赖构造函数参数的实例成员。如果没有其他的可读性,将所有其他实例成员初始化到同一个构造函数中可能是合理的。
否则,没有区别。
[最佳实践:初始化构造函数或声明中的类字段?]的可能的重复?(http://stackoverflow.com/questions/24551/best-practice-initialize-class-fields-in-constructor-or-at -declaration) –