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

时间:2014-02-20 12:55:13

标签: 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();
    }
}

我想不出任何实际差异,有没有?否则,是否存在一种方法比另一种方法更好的情况,即使它们具有相同的结果?

3 个答案:

答案 0 :(得分:3)

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

  1. 将字段设置为默认初始值(0,false,null)
  2. 调用对象的构造函数(但不执行对象的主体) 还是构造函数)
  3. 调用超类的构造函数
  4. 使用初始值设定项和初始化块初始化字段
  5. 执行构造函数的主体
  6. 因此,第一种情况将在第4步初始化变量sample_attribute,第二种情况将在第5步初始化变量sample_attribute。这完全取决于您的要求。

    如果要从Constructor访问任何变量,则需要使用第一种情况。

答案 1 :(得分:0)

使用传递给构造函数的信息初始化字段时,除了在构造函数中初始化之外别无选择。否则,我更喜欢现场初始化,因为它节省了我以后必须阅读的代码行。

答案 2 :(得分:0)

这两个版本是等效的。但是如果new Sample()抛出一个已检查的异常,您将无法在字段声明

中初始化它