Java singleton,它是如何工作的?
我不完全理解Java中单例类的概念。例如,我有这样的单例类:Java singleton,它是如何工作的?,java,Java,我不完全理解Java中单例类的概念。例如,我有这样的单例类: private int i = 0; private static Singleton INSTANCE = new Singleton(); public static Singleton getInstance() { return INSTANCE; } public int getI() { return i; } public void setI(int i) { this.i = i; }
private int i = 0;
private static Singleton INSTANCE = new Singleton();
public static Singleton getInstance() {
return INSTANCE;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
所以每次我调用getInstance()时,它不是因为以下原因而创建了一个新的Singleton对象:newSingleton()
那么为什么我要这样初始化它:
Singleton s = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
s.setI(5);
System.out.println(s.getI());
System.out.println(s2.getI());
我得到了两次“5”。
它不应该第二次给我写0吗?我真的错过了一些东西,但不知道是什么
INSTANCE = new Singleton();
将只被调用一次,因为它是静态的。此后:
getInstance()
仅返回静态实例Singleton是一个仅包含一个类的模式,该类负责创建一个对象,同时确保只创建一个对象 该类提供了一种访问其唯一对象的方法,可以直接访问该对象,而无需实例化该类的对象 为了实现这一目标,联合国应:
private int i = 0;
//create an object of SingleObject
private static SingleObject instance = new SingleObject();
//make the constructor private so that this class cannot be
//instantiated
private SingleObject() {}
//Get the only object available
public static SingleObject getInstance() {
return instance;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
At
Singleton INSTANCE=new Singleton()
partnew Singleton()
创建Singleton
类型的新实例,并返回对它的引用(reference=JVM用来标识对象的编号),该引用存储在instance
变量中。在return INSTANCE
方法返回表示先前创建的一个单例实例的引用(编号),不需要再创建其他单例实例。问题似乎在于您不了解变量的工作原理。可能相关:@Boharuk123 no。。它是一个静态变量。全班只有一个。我建议您阅读Oracle关于@Boharuk123的Java教程,它不需要检查。它在类首次加载时创建它。然后调用Singleton.getInstance()代码>每次都会得到相同的值。(这也是一个静态方法,因此不使用对象来调用该方法。)值是创建的一个对象。INSTANCE=newsingleton()
只是变量的初始化。它的初始化次数不会超过一次。您可以使用==
检查它们是否相同,这将检查它们是否具有相同的引用,例如System.out.println(“相同的单例:”+(s==s1))代码>我认为你所做的与singleton模式无关,你只是创建了一个名为instance的静态属性,该属性将在singleton类的所有实例之间共享。除此之外,s和s2对同一实例具有相同的引用,这就是为什么它总是返回相同的i值。