永远不会运行静态块

时间:2013-03-27 01:05:30

标签: java static

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

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 does static class initialization happen?How to force a class to be initialised?的答案我理解,该块应该在a static field of the class is assigned时运行,我立即执行此操作。我也尝试使变量non-final满足条件“a non-constant static field is used”。

我可以使用init方法同样在Why doesn't my static block of code execute?的另外两个问题中使用,但我仍然想知道为什么它不起作用,尽管我似乎已经满足了条件来自语言规范。

1 个答案:

答案 0 :(得分: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");
     }
}

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

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