在静态块内部和外部初始化静态对象有什么区别?

what is the difference between Initializing a static object inside static block and outside?

下面两个代码有什么区别?

Class A {  private static A obj;  static{ obj= new A();}  }

Class A {  private static A obj=new A();    }

在你上面提到的例子中,两个程序都在做同样的事情。所以你无法判断初始化静态对象和静态块有什么区别。在 JVM 加载 class 时,静态块将仅被调用一次 。静态块的目的是初始化静态变量和调用静态方法。记住一件事,在使用任何资源之前进行初始化,因此这是一个选项,甚至在调用 class 的构造函数之前都会被调用。如果您需要在加载 class 时初始化静态变量或在加载 class 时调用方法来初始化某些东西,那么在这种情况下,静态块将很有帮助。这是创建静态对象并在静态块中对其进行初始化的示例。

private static List<String> arrList = new ArrayList<>();
static{
     arrList.add("Hello");
     arrList.add("World!!!");
}