这两种初始化类成员的方式有区别吗?
在类主体中:
public class A {
private mB = new B();
public A() {
}
}
或者在构造函数中:
public class A {
private mB = null;
public A() {
mB = new B();
}
}
最佳答案
理论上,初始化的顺序是有区别的。这是 JVM 使用的序列:
- 执行静态语句/静态 block 。
- 实例变量被赋予默认值
- 如果为实例变量分配了编译时常量,则实例变量会被初始化。否则,它将与第 5 项一起完成(实例变量 和 实例初始化器将按照它们定义的顺序从上到下一起完成)。
- 构造函数运行
- 实例初始化 block 在对 super 的所有调用都已完成但构造函数的其余部分执行之前运行。
- 执行构造函数的其余部分。
此外,如果您在构造函数中初始化字段,则可能意味着您可能会得到一些重复项。就个人而言,我认为在构造函数中或字段中实例化它们并不重要,但要点是您对此保持一致。对我来说,它有助于在字段声明中实例化它们,因此我知道哪些字段始终存在,哪些字段是可选的。希望对您有所帮助!
关于java - 在类主体或构造函数中初始化类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590782/