2013-03-27 125 views
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 does static class initialization happen?How to force a class to be initialised?的答案我应该马上做a static field of the class is assigned。我也尝试使可变非最终符合条件“a non-constant static field is used”。

我可以使用初始化方法,也可以在其他两个问题中获得,也可以在Why doesn't my static block of code execute?中使用,但我仍然想理解它为什么不起作用,尽管我似乎已经完成了语言的条件规范。

回答

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

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

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

+0

工作,谢谢。将是几分钟,直到我可以接受你的答案。你能解释一下没有'static'关键字的结构有什么区别吗?我之前使用过,它一直工作到目前为止(例如,如果我调用静态方法,块之前运行)。 – 2013-03-27 01:13:33

+0

看到我上面编辑的答案 – 2013-03-27 01:19:03

+0

真棒提示,thx – Jason 2013-03-27 01:27:17