2016-11-29 16 views
-3

ここでは、変数をインスタンス化するためにstaticキーワードを使用しています.2つの異なるObjects.Iを使用して変数を呼び出しています。静的キーワードを使用せずに1と2の結果を出力します。 。staticキーワードを使用せずに変数をインクリメント

public class Test { 
    static int a = 1; 

    public void meth() { 
     System.out.println(a); 
     a = a + 1; 
    } 

    public static void main(String[] args) { 
     Test a = new Test(); 
     Test b = new Test(); 
     a.meth(); //prints 1 
     b.meth(); //prints 2 
    } 

} 
+1

割り当て質問:Testを構築する際に例えば

intのための可変ラッパーとしてAtomicIntegerを使用して、オブジェクトを提供しますか? –

+0

staticキーワードを削除すると、aの値は '' Test''の2つのインスタンスで共有されなくなります。したがって、あなたの出力は、それぞれのインスタンスが独自のカウント変数を持つので、 '' 1 ''になります。 – f1sh

+1

'a'はすべてのインスタンスで共有されます。 'static'を削除すると、それは各インスタンスに関連付けられます。 1つのインスタンスを作成し、 'meth'を2回呼び出す - 最初の呼び出しは1を出力し、2回目は2を出力します。 – Maroun

答えて

0

あなたがstaticキーワードを削除する場合は、Testのあなたの2つのインスタンスでint変数を共有する必要があります。

public class Test { 
    private final AtomicInteger a; 
    // + constructor setting a + getter 

    public void increment() { 
     a.incrementAndGet(); 
    } 

} 

public class Main { 
    public static void main(String[] args) { 
     AtomicInteger i = new AtomicInteger() 
     Test a = new Test(i); 
     Test b = new Test(i); 

     System.out.println(i.get()); // prints 0 
     a.increment(); 
     System.out.println(i.get()); // prints 1 
     b.increment(); 
     System.out.println(i.get()); // prints 2 

    } 
} 
関連する問題