java - 在类主体或构造函数中初始化类成员?

标签 java constructor initialization

这两种初始化类成员的方式有区别吗?

在类主体中:

public class A {
    private mB = new B();
    public A() {
    }
}

或者在构造函数中:

public class A {
    private mB = null;
    public A() {
        mB = new B();
    }
}

最佳答案

理论上,初始化的顺序是有区别的。这是 JVM 使用的序列:

  1. 执行静态语句/静态 block 。
  2. 实例变量被赋予默认值
  3. 如果为实例变量分配了编译时常量,则实例变量会被初始化。否则,它将与第 5 项一起完成(实例变量 实例初始化器将按照它们定义的顺序从上到下一起完成)。
  4. 构造函数运行
  5. 实例初始化 block 在对 super 的所有调用都已完成但构造函数的其余部分执行之前运行。
  6. 执行构造函数的其余部分。

此外,如果您在构造函数中初始化字段,则可能意味着您可能会得到一些重复项。就个人而言,我认为在构造函数中或字段中实例化它们并不重要,但要点是您对此保持一致。对我来说,它有助于在字段声明中实例化它们,因此我知道哪些字段始终存在,哪些字段是可选的。希望对您有所帮助!

关于java - 在类主体或构造函数中初始化类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590782/

相关文章:

IOS/SQLite : Where/Where is the best time to create the database

java - 变量可能尚未初始化,使用 2 个类

java - 无需重新登录 asmack 即可更改 Activity

java - 实例化对象时出现 StackOverFlow 错误

c - 如何初始化一个(复杂的?)结构

java - BMR 计算器测试

C# 对象构造函数重载

java - CXF:记录请求和响应

java - 如何以编程方式在 stripe 上创建平台帐户

java - 如何将 Java 中的此 SHA 函数转换为 Ruby 中的等效函数?