在声明时初始化静态变量与在静态块中初始化静态变量有什么区别?

What is the difference between initializing a static variable when it is declared vs initializing it in a static block?

我在下面 link 的服务定位器设计模式指南的第 5 步中找到了这种用法 https://www.tutorialspoint.com/design_pattern/service_locator_pattern.htm

我不明白他们为什么使用这种结构。

public class ServiceLocator {
   private static Cache cache;

   static {
      cache = new Cache();      
   }
}

   private static Cache cache = new Cache();

在此特定实例中,结果完全相同。如果您需要应用更多逻辑而不仅仅是简单的字段初始化,则可以使用静态块。

如果您的目标是提高代码的可读性,您应该只初始化一个静态变量:

private static Cache cache = new Cache();