为什么 "reinitialise the class variable" 当只有一个 class 变量的副本在这个特定 class 的所有实例之间共享

Why "reinitialise the class variable" when there is only one copy of class variable that is shared between all instance of this particular class

我是 Java 的新手,正在尝试学习静态初始化块的概念。我从 Java 教程 oracle 中看到了下面的代码和语句。我的问题是,为什么教程说:

"the advantage of private static methods is that they can be reused later if you need to reinitialise the class variable"

当此特定 class 的所有实例之间共享只有一个 class 变量副本时?

class Whatever {
    public static varType myVar = initializeClassVariable();

    private static varType initializeClassVariable() {

        // initialization code goes here
    }
}

有时您想将静态变量重置为其初始值。 一个例子可能是您想要不时重置的全局计数器

class Whatever {

  private static int counter = getCountInit();

  public static resetCounter() {
    counter = getCountInit();
  }

  private static getCountInit() {
    return 0; // or some fancy computation
  }

}

另一个例子是测试:假设你有一个测试用例 A,它改变了 class 的一些静态变量,还有一个测试用例 B 也使用了这个静态变量。如果不将静态变量设置回初始值,测试的结果将根据它们 运行 的顺序而有所不同。 (旁注:这就是为什么拥有全局状态(静态变量是全局状态)通常不是一个好主意的主要原因之一——至少在大型软件项目中是这样。)

static 对于变量词意味着它在 class 的所有实例之间共享,例如,如果您有 class SpaceShip 并且有静态变量 color = "blue"; 并创造了很多宇宙飞船我的意思是 class 然后你将颜色更改为 "red" 那么所有的宇宙飞船都会是红色的...

静态对象只能通过静态方法访问。因此,如果您想重置静态对象值,我们应该为此使用静态方法。通常这不会暴露给 API 用户,因此最好在此处将它们保密。