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

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

    public void display() {
        System.out.println(n + " " + m);}
    }
}

执行: -

C3 c1 = new C3(); 
c1.display(); 
C3 c2 = new C3(); 
c1.display(); 
c2.display();   

打印数字(输出)

1 1 
2 1 
2 1

任何人都可以请逐步解释我的输出吗?我对第二行输出有点困惑,为什么 m 和 n 值都没有增加?同样在第三个输出中,为什么它没有从头开始?

4

6 回答 6

10

m不是静态的。这意味着每个实例都有不同的变量。

当你执行new C3();时,

  • 你创建了一个新的类实例C3
  • 您增加静态变量n(由所有实例共享)
  • 您创建一个新变量,m初始化为0
  • 并且您增加m但仅针对您的新实例。
于 2013-01-15T15:45:43.083 回答
3

n是 a static variable,因此类的所有实例(在这种情况下为 c1 和 c2 )共享其数据,其中m不是 a static variable,这意味着每个实例都有自己的m值

 //initial vals n=0 m=0;
  C3 c1 = new C3(); 
 //value of n is 1 value of m is 1   
 c1.display();


//initial values n=0, m=1(as c1 just incremented n which is static and c2 will now inc      n's current value(which is 1))    
C3 c2 = new C3(); 
//value of n is 2 value of m is 1 
c1.display(); 
c2.display();  
于 2013-01-15T15:46:45.507 回答
1

n是一个静态变量,因此它的作用域是类,而不是实例。

m另一方面,它是一个实例变量,并且只存在于一个实例中。

因此,每次初始化 anew C3()时,m都会设置为 1(因为它是 new m),但n每次都会递增(因为所有实例都共享它)。

于 2013-01-15T15:47:22.367 回答
0

您实例化的每个对象都将拥有m = 1,因为 m 是一个实例变量。 n,另一方面,是一个类变量。您实例化的每个对象都会将 n 增加 1。

在您的情况下,n将计算您创建了多少个对象。

于 2013-01-15T15:52:00.710 回答
0

对于 c1 和 c2,只有一个 n 可用,因为 n 是静态的。但由于 m 不是静态的,因此两者都将表现出单独的 m。

C3 c1 = 新 C3(); 现在 m=1 和 n=1(m 属于 c1,n 属于类) C3 c2 = new C3(); 现在 m=1 和 n=2(m 属于 c1,n 属于类)

于 2013-01-15T15:50:40.390 回答
0
class C3 {
public static int n = 0; //static or class variable, n does not become 0 after every new instance
public int m = 0; //instance variable, m becomes 0 for every instance

public C3() {
    n++; //n becomes the "last value the class had for n" + 1
    m++; //m becomes 1
}

public void display() {
    System.out.println(n + " " + m);}
}

}

始终将静态变量视为类变量,因此您只会在第一次将其实例化为 0 。

于 2013-01-15T15:56:36.290 回答