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

在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. 调用超类的构造函数
  4. 使用初始化程序和初始化块初始化字段
  5. 执行构造函数的主体

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

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

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

这两个版本是等价的。 但是如果new Sample()抛出了一个检查过的exception,你将无法在字段声明中初始化它