在构造函数中,指定的最终对象字段是否仍然为空?

Tom*_*ito 5 java null constructor initialization

在构造函数中,指定的最终对象字段是否仍然为空?

class MyClass {
  private final Object obj = new Object();
  public MyClass() {
    System.out.println(obj); // may print null?
  }
}
Run Code Online (Sandbox Code Playgroud)

如果是的话,这不是一个错误吗?

ILM*_*tan 5

正如其他答案所讨论的,不,这不可能发生。但是,有了分配的最终静态字段,它可以。

class MyClass {
  private static MyClass myClass = new MyClass();
  private static final Object obj = new Object();
  public MyClass() {
    System.out.println(obj); // will print null once
  }
}
Run Code Online (Sandbox Code Playgroud)