我有一个看起来像这样的实用程序类:
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 方法,这在其他两个问题和为什么我的静态代码块不执行?但是我仍然想了解为什么它一开始就不起作用,尽管我似乎已经满足了语言规范中的条件。