gpt4 book ai didi

java - Java 中一个类的多个静态实例?

转载 作者:行者123 更新时间:2023-12-02 14:37:46 25 4
gpt4 key购买 nike

我是新人,如果你发现这个问题很愚蠢,请不要介意。我弄乱了单例代码。我稍微改变了它(我的问题与单例无关,是的,我已经删除了单例检查)。我的问题是虽然java中的类实例只能是输出中有两个静态类“实例”的原因之一(参见散列)。我知道“new”关键字将给出一个新的内存地址(这就是散列中打印的内容),但不是'静态类实例应该是一个吗?所以我得到两个用于打印对象实例的哈希值,静态变量 k 具有相同的值,这很好。

public class Singleton {

private static Singleton instance;
static int k;


public static Singleton getInstance(){
try{
instance = new Singleton();

System.out.println(instance);
}catch(Exception e){
throw new RuntimeException("Exception occured in creating singleton instance");
}
return instance;
}

public static void main(String[] ar) {
Singleton c1=Singleton.getInstance();
c1.k=1;
Singleton c2=Singleton.getInstance();
c2.k=2;
System.out.println(c1.k);
System.out.println(c2.k);

}
}

输出:

Singleton@15db9742
Singleton@6d06d69c
2
2

最佳答案

您的变量instance在两个对象之间共享,但当您调用instance = new Singleton();时,它指向的对象会发生更改

我猜你要找的就是这个。

public class Singleton {
public static Singleton instance; //field is made public so we can print it from main class (just to debug)
static int k;


public static Singleton getInstance(){
try{
instance = new Singleton();
}catch(Exception e){
throw new RuntimeException("Exception occured in creating singleton instance");
}
return instance;
}

public static void main(String[] ar) {
Singleton c1=Singleton.getInstance();
c1.k=1;
Singleton c2=Singleton.getInstance();
c2.k=2;

//notice that both of the instance variables of c1 and c2 are printed
//after we've initialized all of them.
System.out.println(c1.instance);
System.out.println(c2.instance);

System.out.println(c1.k);
System.out.println(c2.k);

}
}

在这里您将获得两个实例变量相同的值

输出

Singleton@6d06d69c
Singleton@6d06d69c
2
2

这个想法是在为所有对象初始化instance变量后打印值。最近的初始化将覆盖所有先前的初始化。

关于java - Java 中一个类的多个静态实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433949/

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