这两种初始化班级成员的方式有什么不同吗?
在课堂上:
public class A {
private mB = new B();
public A() {
}
}
或者在构造函数中:
public class A {
private mB = null;
public A() {
mB = new B();
}
}
答案 0 :(得分:4)
理论上,初始化顺序有所不同。这是JVM使用的序列:
此外,如果初始化构造函数中的字段,则可能意味着您可能会遇到一些重复。就个人而言,我认为在构造函数或字段中实例化它们并不重要,但重点是你对它的一致性。对我来说,它有助于在字段声明中实例化它们,因此我知道哪些字段始终存在,哪些字段是可选的。希望有所帮助!
答案 1 :(得分:3)
首先运行实例初始化程序,然后初始化构造函数中的值。您可以学习order of execution of initialization blocks and constructors
答案 2 :(得分:2)
如果B()构造函数抛出了一个已检查的异常,那么这个
private mB = new B();
将是编译时错误,而在构造函数中,您可以捕获它或在throws
子句中声明
答案 3 :(得分:1)
我会做你认为更简单的那个。
主要区别在于,如果向第一个添加另一个构造函数,则不必重复初始化。
答案 4 :(得分:1)
您的第一个示例初始化变量一次:第二个示例,两次。首先是首选,特别是如果有多个构造函数,除非当然涉及例外。