0

これは私が定義したジェネリック クラスです。私が知りたいのは、より具体的なクラス (CAR クラスなど) を作成するとき、いつクラス変数を使用するのかということです。クラス変数に関する私の個人的な理解は、クラスで宣言されたクラス変数の単一のコピーが static キーワードを使用して宣言され、クラスからインスタンス化された各オブジェクトにはクラスの単一のコピーが含まれることです。変数。

インスタンス変数を使用すると、クラスから作成されたクラス/オブジェクトの各インスタンスが、オブジェクトごとにインスタンス変数の個別のコピーを持つことができますか?

したがって、インスタンス変数はクラス/データ型のプロパティを定義するのに役立ちます。たとえば、House には場所がありますが、House オブジェクトでクラス変数を使用するのはいつでしょうか? 言い換えれば、クラスを設計する際のクラス オブジェクトの正しい使用法は何ですか?

public class InstanceVaribale {
public int id; //Instance Variable: each object of this class will have a seperate copy of this variable that will exist during the life cycle of the object.
static int count = 0; //Class Variable: each object of this class will contain a single copy of this variable which has the same value unless mutated during the lifecycle of the objects.

InstanceVaribale() {
    count++;

}
public static void main(String[] args) {

    InstanceVaribale A = new InstanceVaribale();
    System.out.println(A.count);
    InstanceVaribale B = new InstanceVaribale();
    System.out.println(B.count);
    System.out.println(A.id);
    System.out.println(A.count);
    System.out.println(B.id);
    System.out.println(B.count);    
    InstanceVaribale C = new InstanceVaribale();
    System.out.println(C.count);
}
}
4

3 に答える 3

6

クラス変数に関する私の個人的な理解は、クラスで宣言されたクラス変数の単一のコピーが static キーワードを使用して宣言され、クラスからインスタンス化された各オブジェクトにはクラスの単一のコピーが含まれることです。変数。

いいえ、「各オブジェクトに単一のコピーが含まれる」ということではありません。静的変数は、型の各インスタンスではなく、に関連付けられています。インスタンスには変数がまったくありません。

変数は 1 つだけです (1 つのクラスローダーからのみロードしていると仮定します)、その型のインスタンスは多数あります。インスタンスがありませんか? まだ1つの変数。100万インスタンス?まだ1つの変数。

静的変数は、ほとんどの場合、定数または定数に似たもの (ロガー、または「有効な価格のセット」など) に役立ちます。アプリケーションの過程で変化しないもの。それらは私の経験ではほとんど常に存在finalし、型は不変型 ( などString) である必要があります。可能であれば、静的変数にも不変コレクションを使用するか、変数がプライベートであることを確認し、クラス内でコレクションを決して変更しないようにしてください。

グローバルな変化状態を格納するために静的変数を使用することは避けてください。これにより、コードのテストと推論がはるかに難しくなります。

于 2012-07-24T17:14:33.463 に答える
1

1.すべてにインスタンス変数の独自のコピーがありobject of the classます。One per Object.

2.しかし、クラスのすべてのオブジェクトによって共有されますstatic variableOne per Class.

3.ここで、これら2つが重要になる2つの例を示します。

インスタンス変数:

ゲームプログラムを考えてみましょう。そうすると、各プレイヤーは異なる名前、スコア、武器-パワー、到達ステージなどを持ちます。

静的変数:

銀行のプログラムを考えてみましょう。このプログラムでは、各クライアントに前のIDよりも大きくて一意のIDが与えられるため、静的変数がこれに適しています。

于 2012-07-24T17:31:16.527 に答える
1

静的変数は、クラスのすべてのインスタンス間で共有される値を格納するために使用されます。

そうでない場合は、インスタンス変数にする必要があります。

于 2012-07-25T00:23:34.607 に答える