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

誰かが私に出力を段階的に説明してもらえますか? 出力の 2 行目について少し混乱しています。なぜ m と n の両方の値が増加しなかったのですか? また、3番目の出力では、なぜ最初から開始しなかったのですか?

4

6 に答える 6

10

m静的ではありません。これは、インスタンスごとに異なる変数があることを意味します。

を実行するnew C3();と、

  • クラスの新しいインスタンスを作成しC3
  • 静的変数をインクリメントしますn(すべてのインスタンスで共有)
  • mに初期化された新しい変数を作成し0
  • 増分しますmが、新しいインスタンスに対してのみです。
于 2013-01-15T15:45:43.083 に答える
3

nは astatic variableであるため、クラスのすべてのインスタンス (この場合は c1 と c2) はそのデータを共有します。mは astatic 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一方、 はインスタンス変数であり、インスタンス内にのみ存在します。

その結果、 を初期化するたびnew C3()mが 1 に設定されますが (これは新しい であるためm)、n毎回インクリメントされます (すべてのインスタンスがそれを共有しているため)。

于 2013-01-15T15:47:22.367 に答える
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 に答える
0

m = 1mはインスタンス変数であるため、 インスタンス化するすべてのオブジェクトが持つことになります。n一方、はクラス変数です。インスタンス化するすべてのオブジェクトは、nを1ずつ増やします。

あなたの場合、nあなたが作成したオブジェクトの数を数えます。

于 2013-01-15T15:52:00.710 に答える
0

c1 と c2 の場合、n は静的であるため、使用できる n は 1 つだけです。ただし、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 に答える