默认构造函数和直接初始化对象的字段有什么区别?
有什么理由比另一个更喜欢以下示例?
示例 1
public class Foo
{
private int x = 5;
private String[] y = new String[10];
}
示例 2
public class Foo
{
private int x;
private String[] y;
public Foo()
{
x = 5;
y = new String[10];
}
}
最佳答案
初始化程序在构造函数体之前执行。 (如果你同时拥有初始化器和构造器,这会产生影响,构造器代码会第二次执行并覆盖初始化值)
当您总是需要相同的初始值(例如,在您的示例中,给定大小的数组或特定值的整数)时,初始化器是很好的选择,但它可能对您有利或不利:
如果您有许多以不同方式初始化变量的构造函数(即使用不同的值),那么初始化器将毫无用处,因为这些更改将被覆盖且浪费。
另一方面,如果您有许多使用相同值初始化的构造函数,那么您可以通过将初始化保存在一个地方来节省代码行数(并使您的代码更易于维护)。
正如 Michael 所说,这也涉及到品味问题 - 您可能希望将代码保存在一个地方。虽然如果你有很多构造函数,你的代码在任何情况下都不在一个地方,所以我更喜欢初始化器。
关于java - 默认构造函数与内联字段初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916735/