当我可以通过构造函数初始化静态成员时,为什么要使用静态初始化块?
答案 0 :(得分:4)
首先,您可能永远不会有任何班级实例。或者你可能希望在之前有静态成员你有任何类的实例。
其次,从构造函数初始化静态成员是更多的工作:
最后,概念通常是错误的(我说“通常”因为懒惰初始化有合法用途)。
答案 1 :(得分:1)
静态成员未与该类的任何实例相关联,而构造函数则创建实例。您可以在没有类的单个实例的情况下使用静态成员,但仍然必须初始化它们。在这种情况下,构造函数无法完成工作。
答案 2 :(得分:0)
为什么:
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");
}};