我是新手,请不要介意如果你觉得问题很蠢。我正在研究单例模式代码。我稍微改了一下它(我的问题与单例无关,而且我已经删除了单实例检查)。我的问题是:尽管在Java中类实例只能有一个,但为什么输出中会有两个静态类“instance”(请看哈希值)?我知道“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
getInstance()
都会产生一个新的实例。 - Mark Rotteveelstatic
意味着只有一个变量实例。它与您创建多少对象实例无关。 - shmoselgetInstance()
方法时都会创建一个新实例。 - Mark Rotteveelstatic Singleton s=new Singleton()
是允许的。 - Mark Rotteveel