我有一个如下所示的实用程序类:
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方法,因为在另外两个问题中也是如此.为什么我的静态代码块不执行?但我仍然想明白为什么它不起作用,尽管我似乎已经完成了语言规范的条件.
您必须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)
一个初始化块被称为每次类构造.
一个静态初始化块被在程序开始调用一次.
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |