为什么要使用静态初始化块的Java? [重复](Why would I use static i

2019-07-21 02:39发布

这个问题已经在这里有一个答案:

  • 静态初始化块 14个回答

为什么要使用静态初始化块的时候我可以通过构造函数初始化静态成员?

Answer 1:

首先,你可能永远不会有你的任何类实例。 或者你可能希望有iniailized静态成员您有任何类实例之前

其次,从构造函数初始化静态成员更多的工作:

  • 你需要确保每一个构造函数做到这一点;
  • 你需要保持一个标志来跟踪静态成员是否已被初始化;
  • 你要想想同步以防止竞争条件;
  • 你可能要考虑同步的性能影响,特别是如果你有多个线程创建类的实例。

最后,它通常是错误的东西从概念上做(我说“通常是”因为有延迟初始化合法用途)。



Answer 2:

静态成员没有关联的类的任何实例,而构造函数创建一个实例。 您可以使用静态成员,而无需类的一个实例,他们仍然必须被初始化。 在这种情况下,构造函数不能做的工作。



Answer 3:

所以为什么:

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");
}};
  1. 它引入了一个新的匿名类,在JAR文件; 并不是这么完美。
  2. 第二种形式是一个令人讨厌戏的事。


文章来源: Why would I use static initialization block in java? [duplicate]
标签: java static