初始化声明与构造函数初始化

amr*_*san 7 java

可能重复:
我应该在构造函数或外部构造函数中初始化变量

我想知道,这是一个更好的做法,为什么.我应该在声明时初始化类字段,还是应该在构造函数中执行?鉴于它是一个简单的单行初始化.

class Dude
{
    String name = "El duderino";

    Dude() {
        // irrelevant code
    }
}
Run Code Online (Sandbox Code Playgroud)

class Dude
{
    String name;

    Dude() {
        name = "El duderino";

        // irrelevant code
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我知道其中一种样式优先于另一种样式的情况,例如执行可能引发异常的初始化代码的情况.我在这里谈论的是两种风格完全相同的情况.两种方式都可以完成同样的任务.我应该使用哪个?

eri*_*son 5

如果只能通过访问器(“ setter”方法)设置成员,则我更喜欢第一种样式。它暗示了初始化值是构造时的默认值。

如果可以在构造过程中指定成员,则通常将默认值从带有较少参数的构造函数传递给适当的构造函数。例如,

final class Dude {

  private final String name;

  Dude() {
    this("El Duderino");
  }

  Dude(String name) {
    this.name = name;
  }

}
Run Code Online (Sandbox Code Playgroud)