Java 定义中的初始化与构造函数中的初始化
在Java中,但在其他OO语言中,在属性定义中初始化属性与在Java 定义中的初始化与构造函数中的初始化,java,oop,constructor,initialization,theory,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(); } } 我想不出有什么实际的区
class Example {
public Sample sample_attribute = new Sample();
}
使用构造函数来初始化它
class Example {
public Sample sample_attribute;
public Example() {
sample_attribute = new Sample();
}
}
我想不出有什么实际的区别,是吗?否则,是否存在一种方法优于另一种方法的情况,即使它们具有相同的结果?这里的初始化顺序很重要
sample\u属性
,第二种情况是在第5步初始化变量sample\u属性
。这完全取决于你的要求
如果您想从构造函数中访问任何变量,需要使用第一种情况。当您使用传递到构造函数中的信息初始化字段时,除了在构造函数中初始化之外,您别无选择。否则,我更喜欢当场初始化,因为这样可以节省我以后必须阅读的代码行。这两个版本是等效的。但是,如果
new Sample()
抛出了一个选中的异常,您将无法在字段声明中初始化它如果查看生成的字节码,构造函数将调用超类构造函数,执行初始化,然后执行构造函数中实际编码的内容。因此,除了在构造函数的任何语句之前执行“初始化”之外,没有任何技术上的区别。@HotLicks:是的,这就是我所说的的意思,取决于OP的要求。
@Ɍ我不同意。我的问题要具体得多(与其他问题不同,它实际上是作为一个问题在身体中提出的)。