我应该在构造函数内初始化变量还是在构造函数外部初始化变量

2022-08-31 05:33:40

当我根据我C++知识使用Java时,我喜欢使用以下方式初始化变量。

public class ME {
    private int i;

    public ME() {
         this.i = 100;
    }
}

过了一段时间,我把习惯改成了

public class ME {
    private int i = 100;

    public ME() {
    }
}

我遇到了其他源代码,有些使用1st约定,有些使用2nd约定。

我能知道你们都推荐哪种公约,为什么?


答案 1

我发现第二种风格(一次性声明+初始化)更胜一筹。原因:

  • 它使变量的初始化方式一目了然。通常,在读取程序并遇到变量时,您将首先转到其声明(通常在IDE中自动)。使用样式 2 时,您可以立即看到默认值。对于样式 1,您还需要查看构造函数。
  • 如果您有多个构造函数,则不必重复初始化(并且不能忘记它们)。

当然,如果初始化值在不同的构造函数中不同(甚至在构造函数中计算),则必须在构造函数中执行此操作。


答案 2

我有几乎总是在构造函数中初始化的做法(习惯),原因有两个,一个在我看来它增加了readablitiy(更干净),第二个构造函数中的逻辑控制比一行中更多。即使实例变量最初不需要逻辑,将其放在构造函数中也可以更灵活地在将来根据需要添加逻辑。

至于上面提到的关于多个构造函数的问题,这很容易通过一个no-arg构造函数来解决,该构造函数初始化所有实例变量,这些实例变量对所有构造函数的初始化相同,然后每个构造函数在第一行调用this()。这解决了你的冗余问题。


推荐