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

标签 java oop constructor

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

有什么理由比另一个更喜欢以下示例?

示例 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/

相关文章:

java - getServletContext().getRealPath ("/")返回错误路径

python - python中的类继承

c# - 2个C#类相互包含为成员

java - 实例变量声明语法

java - 提高java套接字的通信速度

java - 当我在应用程序中按下按钮时,所有 editText 和 TextView 都会移动到屏幕的左侧

java - 我可以用 Java 编写部分 Google App Engine 代码,而其他部分用 Python 编写吗?

java - provider用在方法声明中是什么意思?

c++ - 字符串在构造函数中分配但此后变为空白 C++

c++ - 复制构造函数的调用