如何通过单例保证 class 只有一个实例
How to guarantee only one instance of a class through singletons
我刚刚了解了单例的使用,我正在努力了解如何使用它们将对象实例化限制为只有一个。
我在教程网站上找到了以下示例:
public class Singleton {
private static Singleton singleton = new Singleton( );
private Singleton(){ }
public static Singleton getInstance( ) {
return singleton;
}
但每次我调用 getInstance() 方法时,都会创建一个新对象吗?
我将尝试应用该方法来创建一个 class,它包含一个 hashMap 并在其中实例化存储 5 个对象,因此我需要了解 'singleton' 在我应用它之前可以防止倍数。
这将是应用程序的同一个实例。 JVM 将在您的程序开始时创建实例并且永远不会销毁它。
注意,持有 Singleton
实例的引用是一个 static class 成员。
private static Singleton singleton = new Singleton();
因此,虽然 new Singleton()
看起来每次都创建一个新实例,但它 不是 因为 static 成员获得初始化 仅在加载 class 时初始化一次。
getInstance()
静态方法 然后在应用程序的整个生命周期中不断返回相同的引用,因此返回相同的 Singleton
对象。
此声明
private static Singleton singleton = new Singleton( );
在 class 为 "first referenced" 时有效执行——即,第一次调用 getInstance
。所以只会执行一次。
请参阅第 12.4.1 节 Java Language Specification。
我刚刚了解了单例的使用,我正在努力了解如何使用它们将对象实例化限制为只有一个。
我在教程网站上找到了以下示例:
public class Singleton {
private static Singleton singleton = new Singleton( );
private Singleton(){ }
public static Singleton getInstance( ) {
return singleton;
}
但每次我调用 getInstance() 方法时,都会创建一个新对象吗?
我将尝试应用该方法来创建一个 class,它包含一个 hashMap 并在其中实例化存储 5 个对象,因此我需要了解 'singleton' 在我应用它之前可以防止倍数。
这将是应用程序的同一个实例。 JVM 将在您的程序开始时创建实例并且永远不会销毁它。
注意,持有 Singleton
实例的引用是一个 static class 成员。
private static Singleton singleton = new Singleton();
因此,虽然 new Singleton()
看起来每次都创建一个新实例,但它 不是 因为 static 成员获得初始化 仅在加载 class 时初始化一次。
getInstance()
静态方法 然后在应用程序的整个生命周期中不断返回相同的引用,因此返回相同的 Singleton
对象。
此声明
private static Singleton singleton = new Singleton( );
在 class 为 "first referenced" 时有效执行——即,第一次调用 getInstance
。所以只会执行一次。
请参阅第 12.4.1 节 Java Language Specification。