2016-11-29 29 views
-3

这里我使用static关键字来实例化一个变量而我使用两个不同的对象调用变量。我想打印结果为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

分配的问题? –

+0

当您删除static关键字时,a的值不再在“Test”的两个实例中共享。因此,由于每个实例都有自己的计数变量,因此您的输出将为“1 1”。 – f1sh

+1

'a'在所有实例之间共享。如果你删除了'static',它将与每个实例关联。创建一个实例并调用两次“meth” - 第一个调用将打印1,第二个将打印2。 – Maroun

回答

0

如果删除static关键字,你需要在你的Test两个实例共享一个int变量。

例如,使用AtomicInteger作为int一个可变包装和提供所述对象构建Test时:

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 

    } 
} 
相关问题