这个问题已经在这里有一个答案:
- 静态初始化块 14个回答
为什么要使用静态初始化块的时候我可以通过构造函数初始化静态成员?
这个问题已经在这里有一个答案:
为什么要使用静态初始化块的时候我可以通过构造函数初始化静态成员?
首先,你可能永远不会有你的任何类实例。 或者你可能希望有iniailized静态成员您有任何类实例之前 。
其次,从构造函数初始化静态成员更多的工作:
最后,它通常是错误的东西从概念上做(我说“通常是”因为有延迟初始化合法用途)。
静态成员没有关联的类的任何实例,而构造函数创建一个实例。 您可以使用静态成员,而无需类的一个实例,他们仍然必须被初始化。 在这种情况下,构造函数不能做的工作。
所以为什么:
static Set<String> digits = new HashSet<String>();
static {
Collections.add(digits, "unu", "du", "tri", "kvar", "kvin");
digits.add("ses");
digits.add("sep");
digits.add("ok");
}
如果以下是可能的:
static Set<String> digits = new HashSet<String>() {{
Collections.add(this, "unu", "du", "tri", "kvar", "kvin");
add("ses");
add("sep");
add("ok");
}};