gpt4 book ai didi

java - 为什么单例静态方法 getNext() 返回增量值

转载 作者:行者123 更新时间:2023-11-29 06:56:21 27 4
gpt4 key购买 nike

我有一个带有静态方法 getNext()

的单例类
public class Sequence {

private static Sequence instance;
private static int counter;

private Sequence () { // note: private constructor
counter = 0;
}

public static Sequence getInstance(){
if(instance==null) { // Lazy instantiation
instance = new Sequence();
}
return instance;
}

public static int getNext(){ return ++counter;}
}

在我的测试代码中,我有一个多次调用 getNext() 的 for 循环

public class TestSequence {
public static void main(String[] args) {
for (int i = 0; i < 5; i++)
System.out.println(Sequence.getNext());
}

它的输出是

1
2
3
4
5

这是为什么呢?根据我对 static 的理解,我认为输出总是 1

我理解使用 static 方法不需要创建类(对象)的实例。当未创建对象时,每次调用静态 getNext() 方法都应增加新的(虚拟)实例变量 counter = 0 并返回它。

但我的程序的行为方式与非静态方法完全相同。为什么?可能我误解了某些事情或简化了事情。

最佳答案

every call to static getNext() method should increment new (virtual) instance variable counter = 0 and return it

不,静态变量(如 counter 是)是一个类变量,这意味着它只有一个实例,因此在每次调用静态方法时都会递增相同的变量。

如果 counter 不是静态的并且您更改 getNext() 以创建一个新的 Sequence 实例,您将获得预期的行为:

public static int getNext(){
Sequence seq = new Sequence ();
seq.counter += 1;
return seq.counter;
}

但是 Sequence 就不是单例了。

关于java - 为什么单例静态方法 getNext() 返回增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384439/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com