为什么我在java中使用静态初始化块?

Bhu*_*han 6 java static

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

NPE*_*NPE 6

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

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

  • 你需要确保每个构造函数都这样做;
  • 您需要维护一个标志来跟踪静态成员是否已初始化;
  • 你必须考虑同步以防止竞争条件;
  • 您可能必须考虑同步的性能影响,特别是当您有许多线程创建您的类的许多实例时。

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