这两种初始化类成员的方式有什么区别吗?
在类体内:
public class A {
private mB = new B();
public A() {
}
}
或者在构造函数中:
public class A {
private mB = null;
public A() {
mB = new B();
}
}
这两种初始化类成员的方式有什么区别吗?
在类体内:
public class A {
private mB = new B();
public A() {
}
}
或者在构造函数中:
public class A {
private mB = null;
public A() {
mB = new B();
}
}
理论上,初始化的顺序是有区别的。这是 JVM 使用的序列:
此外,如果您在构造函数中初始化字段,则可能意味着您可能会得到一些重复。就个人而言,我认为在构造函数或字段中实例化它们并不重要,但重点是您对此保持一致。对我来说,让它们在字段声明中实例化很有帮助,这样我就知道哪些字段始终存在,哪些字段是可选的。希望有帮助!
实例初始化程序首先运行,然后初始化构造函数中的值。您可以研究初始化块和构造函数的执行顺序
如果 B() 构造函数抛出一个检查异常,那么这个
private mB = new B();
将是编译时错误,而在构造函数中您可以捕获它或在throws
子句中声明
我会做你认为更简单的那个。
主要区别在于,如果您向第一个构造函数添加另一个构造函数,则不必重复初始化。
你的第一个例子初始化变量一次:你的第二个例子,两次。首先是首选,特别是如果有多个构造函数,除非当然涉及异常。