永远不会运行静态块

And*_*nek 0 java static

我有一个如下所示的实用程序类:

public final class MyUtils {

     public static final List<String> MY_VALUES = new ArrayList<String>();

     {
         MY_VALUES.add("foo");
         MY_VALUES.add("bar");
     }
}
Run Code Online (Sandbox Code Playgroud)

我从另一个类中调用它,就像这样:

MyUtils.MY_VALUES
Run Code Online (Sandbox Code Playgroud)

如果我这样做,列表是空的,如果我调试,我看到静态块永远不会运行.

据我所知,静态类初始化何时发生?以及如何强制一个类初始化?a static field of the class is assigned我应该立即运行该块.我也尝试使变量非final来满足条件" a non-constant static field is used".

我可以使用一个init方法,因为在另外两个问题中也是如此.为什么我的静态代码块不执行?但我仍然想明白为什么它不起作用,尽管我似乎已经完成了语言规范的条件.

Ste*_*ler 8

您必须static在块前面添加关键字才能使其成为静态:

public final class MyUtils {

     public static final List<String> MY_VALUES = new ArrayList<String>();

     static {
         MY_VALUES.add("foo");
         MY_VALUES.add("bar");
     }
}
Run Code Online (Sandbox Code Playgroud)

一个初始化块被称为每次类构造.

一个静态初始化块被在程序开始调用一次.