非静态方法可以修改静态变量吗?

我想知道非静态方法如何修改静态变量。我知道静态方法只能访问其他静态方法和静态变量。然而,另一面是真的吗?非静态方法可以只访问非静态变量吗?例如:

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}

这段代码编译,我想知道为什么在静态访问特权方面。


答案 1

我从Java教程中找到了这个

  • 实例方法可以直接访问实例变量和实例方法。
  • 实例方法可以直接访问类变量和类方法。
  • 类方法可以直接访问类变量和类方法。
  • 类方法不能直接访问实例变量或实例方法,它们必须使用对象引用。此外,类方法不能使用 this 关键字,因为没有实例可供引用。

所以答案是肯定的,非静态方法可以修改静态变量。


答案 2

否,任何非静态方法都可以访问静态成员。唯一的假设是,如果非静态上下文无权访问静态成员(例如,静态成员是某个类的私有成员,而非静态代码不在该类中)。静态变量的存在是为了提供一个无实例的变量/方法,因此,例如,如果我们有一个 Game 类和一个高分变量,则高分将是静态的(无需实例即可访问),并且在每个游戏(Game 类的一个实例)完成后,如果我们的分数大于高分,我们可以从非静态上下文中更改高分。


推荐