0

我有一个看起来像这样的实用程序类:

public final class MyUtils {

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

     {
         MY_VALUES.add("foo");
         MY_VALUES.add("bar");
     }
}

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

MyUtils.MY_VALUES

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

正如我从静态类初始化何时发生的答案中了解到的那样?以及如何强制初始化一个类?块应该在 when 运行a static field of the class is assigned,我马上就这样做。我还尝试使变量成为非最终变量以满足条件“ a non-constant static field is used”。

我可以使用 init 方法,这在其他两个问题和为什么我的静态代码块不执行?但是我仍然想了解为什么它一开始就不起作用,尽管我似乎已经满足了语言规范中的条件。

4

1 回答 1

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");
     }
}

每次构造类时都会调用一个初始化块。

静态初始化块仅在程序开始时调用一次。

于 2013-03-27T01:07:57.503 回答