java - 定义中的初始化与构造函数中的初始化

标签 java oop constructor initialization theory

<分区>

在 Java 中,但在其他 OO 语言中,在其定义中初始化属性之间是否存在差异,如

class Example {
    public Sample sample_attribute = new Sample();
}

并使用构造函数来初始化它?

class Example {
    public Sample sample_attribute;

    public Example() {
        sample_attribute = new Sample();
    }
}

我想不出有什么实际区别,有吗?否则,是否存在一种方法优于另一种方法的情况,即使它们具有相同的结果?

最佳答案

初始化顺序在这里很重要。

  1. 将字段设置为默认初始值(0、false、null)
  2. 调用对象的构造函数(但不执行对象的主体 构造函数)
  3. 调用父类(super class)的构造函数
  4. 使用初始化器和初始化 block 初始化字段
  5. 执行构造函数体

因此,第一种情况将在第 4 步中初始化变量 sample_attribute,第二种情况将在第 5 步中初始化变量 sample_attribute。这完全取决于您的要求。

如果你想访问构造函数中的任何变量,你需要使用第一种情况。

关于java - 定义中的初始化与构造函数中的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908447/

相关文章:

java - 仅使用 xml 的带圆角的 ImageButton?

PHP动态实例化

javascript - 如何编写面向对象的 Node.js 模型

java - 构造函数中的可重写方法调用有什么问题?

java - 我真的需要在java中定义默认构造函数吗?

将一个类传递给另一个类的构造函数时,C++ 无默认构造函数错误

c++ - 如果不从派生构造函数调用基类构造函数会怎样?

java - 在java中屏蔽电子邮件地址

java - 无法使用 Java 中的 Scanner 比较从 txt 文件读取的行

java - Firebase 身份验证错误 getGoogleApiForMethod() 返回 Gms :