0

メインクラスがあり、そこからサブクラスを呼び出します。

私のサブクラスには、次のようないくつかのパブリック静的変数が含まれています

    public class SubClass2 extends Main {


     public static  long a = 0;
     public static  long b = 0;
     public static  long c= 0;

    public void Analyze(int number)
    {
      b=2;

    //some code
     }
    }

mainの場合と同様に、SubClass2のオブジェクトを呼び出します。mainでsubclass2の新しいオブジェクトを作成するたびに、すべての変数= 0を初期化しますが、変数bのprintステートメントを取得すると次のように出力されます。 4.前の値と新しい値を合計します。

ここに画像の説明を入力してください

4

4 に答える 4

6

その場合のようにフィールドを宣言しないでくださいstatic。これが、毎回初期化されていない理由です。フィールドは1static回だけ初期化され、クラスのすべてのインスタンスで共有されます。アクセシビリティによっては、クラス外でも共有されます。

値につながるロジックは、4置き換えたコードに含まれている必要がありますが//some code、これはここでは実際には関係ありません。

何らかの理由で、これらが実際staticにインスタンスがインスタンス化されるたびに初期化されるフィールドである必要がある場合は、クラスのコンストラクターで手動で初期化する必要があります。しかし、私はこの状況につながるデザインに真剣に疑問を投げかけます...

于 2012-05-02T09:01:51.630 に答える
4

静的変数を使用しています。これらは、作成したオブジェクトとは関係ありません。それらは単なるグローバルでユニークな変数です。消去する必要がありstaticます。ちなみに、フィールドを0に初期化するのは冗長です。すでにゼロに初期化されています。

于 2012-05-02T09:02:10.647 に答える
1

staticという単語を使用する場合、それを使用して作成されたすべてのものの間で共有される変数のインスタンスは1つだけになります。staticを削除すると、メソッドで初期化されるたびに、新しい、しかしさらに重要なことに、個々の変数が作成されます。

おそらくより良い言い回しは、インスタンスメソッドが共有/静的変数にアクセスできることとアクセスすることです!

于 2012-05-02T09:04:13.947 に答える
1

あなたの質問は、用語の矛盾を具体化しています。静的変数は、クラスがロードされるときに1回初期化されます。インスタンスごとに変数を初期化する場合は、インスタンスごとの(非静的)変数を使用します。

于 2012-05-02T09:50:38.040 に答える