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

Bri*_*ian 24 java methods static access-modifiers instance-variables

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

public class SampleClass {
  private static int currentCount = 0;

  public SampleClass() {
    currentCount++;
  }

  public void increaseCount() {
    currentCount++;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*ian 38

我从The Java Tutorials中找到了这个

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

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


Rob*_*ell 17

不,任何非静态方法都可以访问静态成员.唯一的方法是假如果非静态上下文不能访问静态成员(例如,静态成员对类是私有的,而非静态代码不在该类中).存在静态变量以提供实例自由变量/方法,例如,如果我们有一个Game类和一个highscore变量,则highscore将是静态的(可以在没有实例的情况下访问),并且在每个游戏之后(Game类的一个实例)如果我们的分数高于高分,我们可以改变非静态背景的高分.


小智 6

非静态方法可以访问静态变量.静态方法只能直接访问静态变量或方法而无需创建object.ex:public static void main(String arg [])