一尘不染

Java 默认构造函数与内联字段初始化

java

默认构造函数和直接初始化对象的字段之间有什么区别?

有什么原因要偏爱以下示例之一?

例子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];
    }
}

阅读 285

收藏
2020-03-13

共1个答案

一尘不染

初始化程序在构造函数主体之前执行。(如果你同时具有初始化程序和构造函数,则会产生影响,构造函数代码将第二次执行并覆盖初始化值)

当你始终需要相同的初始值(例如,在你的示例中为给定大小的数组或特定值的整数)时,初始化器是很好的选择,但是它可以对你有利或不利于你:

如果你有许多构造函数以不同的方式初始化变量(即,使用不同的值),则初始化程序将无用,因为更改将被覆盖且浪费。

另一方面,如果你有许多构造函数使用相同的值进行初始化,则可以通过将初始化保留在一个位置来节省代码行(并使你的代码更易于维护)。

就像Michael所说的,也涉及到品味问题-你可能希望将代码保存在一个地方。尽管如果你有很多构造函数,那么无论如何你的代码都不会放在一个地方,因此我倾向于使用初始化程序。

2020-03-13