Java中的类变量

Sha*_*san 0 java

class C3 {
    public static int n = 0;
    public int m = 0;

    public C3() {
        n++; 
        m++; 
    }

    public void display() {
        System.out.println(n + " " + m);}
    }
}
Run Code Online (Sandbox Code Playgroud)

执行: -

C3 c1 = new C3(); 
c1.display(); 
C3 c2 = new C3(); 
c1.display(); 
c2.display();   
Run Code Online (Sandbox Code Playgroud)

打印数字(输出)

1 1 
2 1 
2 1
Run Code Online (Sandbox Code Playgroud)

任何人都可以一步一步向我解释输出吗?我对第二行输出有点困惑,为什么m和n值都没有增加?也是在第3次输出为什么不从头开始?

Den*_*ret 10

m不是一成不变的.这意味着每个实例都有一个不同的变量.

执行new C3();

  • 你创建了一个新的类实例C3,
  • 你增加静态变量n(由所有实例共享)
  • 你创建一个新的变量m,初始化为0,
  • 然后你增加m但仅适用于你的新实例.