这两种方法在Java中初始化字段有什么区别?

use*_*949 2 java variable-assignment

  1. 使用字段声明将值同时分配给字段
  2. 为构造函数中的字段赋值?

aio*_*obe 7

这两种初始化Java字段的方法有什么区别?

不多!主要区别在于,如果在声明点分配它,它将适用于所有构造函数.也就是说,你无法忘记将初始化添加到任何未来的构造函数中.

看一下官方的Initializing Fields路径.

值得注意的是,如果在声明处初始化字段,则会构造函数开始执行之前发生.

根据经验,我通常会在声明中初始化"死的简单"字段(当毫无疑问应该是初始值时).这"清理"例如

class SomeClass {

    List<Integer> currentNumbers = new ArrayList<Integer>();
    int counter = 0;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

虽然我似乎有可能在不同的构造函数中想要不同的行为,但我将它留给构造函数.

  • 请注意,它发生在构造函数的实体开始执行之前,但是*之后*对`super(...)`的任何调用. (2认同)