Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不使用static关键字的情况下递增变量_Java_Static - Fatal编程技术网

Java 在不使用static关键字的情况下递增变量

Java 在不使用static关键字的情况下递增变量,java,static,Java,Static,在这里,我使用static关键字来实例化一个变量,并使用两个不同的对象调用该变量。我想在不使用static关键字的情况下将结果打印为1和2。提前感谢 public class Test { static int a = 1; public void meth() { System.out.println(a); a = a + 1; } public static void main(String[] args) {

在这里,我使用static关键字来实例化一个变量,并使用两个不同的对象调用该变量。我想在不使用static关键字的情况下将结果打印为1和2。提前感谢

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
    }

}

如果删除
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

    }
}

分配问题?当您删除静态关键字时,
Test
的两个实例中不再共享a的值。因此,您的输出将是
1
,因为每个实例都有自己的计数变量。
a
在所有实例之间共享。如果删除
static
,它将与每个实例相关联。创建一个实例并调用
meth
两次-第一次调用将打印1,第二次调用将打印2。