3

クラス変数についてはかなり混乱しています。私は Java Doc チュートリアルを見ています。彼らは静的変数とメソッドを説明しましたが、概念の 1 つがよくわかりません。彼らは私たちにいくつかのコードを与え、どのような答えが得られるかを尋ねました。

コードが完全に正しいわけではないことに注意してください。プログラムを実行することではなく、静的変数の概念を把握すること

コードは次のとおりです。

public class IdentifyMyParts {
    public static int x = 7;
    public int y = 3;
} 

上記の次のコードから、コードの出力は次のとおりです。

IdentifyMyParts a = new IdentifyMyParts();  //Creates an instance of a class
IdentifyMyParts b = new IdentifyMyParts();  //Creates an instance of a class

a.y = 5;    //Setting the new value of y to 5 on class instance a     
b.y = 6;    //Setting the new value of y to 6 on class instance b
a.x = 1;    //Setting the new value of static variable of x to 1 now.
b.x = 2;    //Setting the new value of static variable of x to 2 now.

System.out.println("a.y = " + a.y);  //Prints 5
System.out.println("b.y = " + b.y);  //Prints 6
System.out.println("a.x = " + a.x);  //Prints 1
System.out.println("b.x = " + b.x);  //Prints 2
System.out.println("IdentifyMyParts.x = " + IdentifyMyParts.x); 

//Prints2  <- This is because the static variable holds the new value of 2 
//which is used by the class and not by the instances.

System.out.println("ax = " + ax); と表示されているため、何か不足していますか? // 1 を出力すると、実際には 2 が出力されます。

4

2 に答える 2

8

静的変数は、クラスのすべてのインスタンスで共有されます。したがってa.xb.x実際には同じものを参照します: static variable x.

基本的に次のことを行っています。

IdentifyMyParts.x = 1;
IdentifyMyParts.x = 2;

したがって、x は 2 になります。

編集: 以下のコメントに基づいて、混乱が原因である可能性があるよう//Prints 1です. // 以降はコメントであり、コードにはまったく影響しません。この場合、コメントは ax の System.out が 1 を出力することを示唆していますが、それは正しくありません (維持されていないコメントはしばしば...)

于 2013-10-31T00:16:07.853 に答える