定义初始化与构造函数初始化
在Java中,但在其他OO语言中,在其定义中初始化属性之间存在差异,如
class Example { public Sample sample_attribute = new Sample(); }
并使用构造函数初始化它?
class Example { public Sample sample_attribute; public Example() { sample_attribute = new Sample(); } }
我想不出任何实际的区别,有吗? 否则,是否存在一种方法比另一种方法更好的情况,即使它们具有相同的结果?
初始化顺序在这里很重要。
- 将字段设置为默认初始值(0,false,null)
- 调用对象的构造函数(但是不要执行构造函数的主体)
- 调用超类的构造函数
- 使用初始化程序和初始化块初始化字段
- 执行构造函数的主体
因此,第一种情况将在第4步初始化变量sample_attribute
,第二种情况将在第5步初始化变量sample_attribute
。 这完全取决于您的要求。
如果要从Constructor访问任何变量,则需要使用第一种情况。
当您使用传递给构造函数的信息初始化字段时,除了在构造函数中初始化之外别无选择。 否则,我更喜欢现场初始化,因为它节省了我以后必须阅读的代码行。
这两个版本是等价的。 但是如果new Sample()
抛出了一个检查过的exception,你将无法在字段声明中初始化它