默认构造函数和直接初始化对象的字段之间有什么区别?
有什么原因要偏爱以下示例之一?
例子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所说的,也涉及到品味问题-你可能希望将代码保存在一个地方。尽管如果你有很多构造函数,那么无论如何你的代码都不会放在一个地方,因此我倾向于使用初始化程序。