<分区>
下面这两个有什么区别,哪个更可取??
public class foo {
int i = 2;
}
public class foo {
int i;
foo() {
i = 2;
}
}
<分区>
下面这两个有什么区别,哪个更可取??
public class foo {
int i = 2;
}
public class foo {
int i;
foo() {
i = 2;
}
}
最佳答案
在您的示例中,行为语义没有区别。在 Java 中,所有实例字段初始化器(和实例 block )都在父类(super class)初始化之后和构造函数体之前执行;见JLS 12.5 .
区别在于代码的可读性和(在其他示例中)避免重复编码和脆弱性1。这些需要根据具体情况进行评估。
还值得注意的是,有些情况下必须在构造函数中进行初始化;即当初始化取决于构造函数参数时。
1 - 重复性和脆弱性问题是同一件事的两面。如果您有多个构造函数,“在构造函数中初始化”方法往往会导致重复。如果您添加额外的字段,您可能会将初始化添加到所有相关的构造函数中;即脆弱性。
关于java - 声明时初始化和构造函数中初始化的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065939/