Java 如何通过单例保证一个类只有一个实例
我刚刚了解了单例的使用,我正在努力了解如何使用它们将对象实例化限制为仅一个 我在一个教程网站上找到了以下示例:Java 如何通过单例保证一个类只有一个实例,java,singleton,Java,Singleton,我刚刚了解了单例的使用,我正在努力了解如何使用它们将对象实例化限制为仅一个 我在一个教程网站上找到了以下示例: public class Singleton { private static Singleton singleton = new Singleton( ); private Singleton(){ } public static Singleton getInstance( ) { return singleton; } 但每次调用getInstance()方法时
public class Singleton {
private static Singleton singleton = new Singleton( );
private Singleton(){ }
public static Singleton getInstance( ) {
return singleton;
}
但每次调用getInstance()方法时,肯定会创建一个新对象
我将尝试并应用该方法来创建一个类,该类包含一个hashMap和其中的实例化存储5个对象,因此我需要了解“单例”的原理如何防止多次重复,然后才能应用它。它将是应用程序的同一个实例。JVM将在程序开始时创建实例,而不会销毁它。注意,保存
单例实例的引用是静态类成员
因此,尽管每次创建一个新实例时,new Singleton()
看起来都像是在创建一个新实例,但它不是,因为该静态成员在加载类时只初始化了一次
然后,在应用程序的整个生命周期中,getInstance()
静态方法不断返回相同的引用,从而返回相同的Singleton
对象
private static Singleton singleton = new Singleton( );
在类被“首次引用”时有效执行,即第一次调用getInstance
时。因此,它将只执行一次
请参阅,第12.4.1节。“但每次调用getInstance()方法时,肯定会创建一个新对象?”-不,你为什么这么认为getInstance
总是返回相同的Singleton
实例,这就是为什么它是Singleton…在getInstance
中是否使用了new
关键字?你认为为什么会创建一个新实例?顺便说一句,过度使用单例是一个很坏的习惯。理解为什么你需要你定义的每一个单例,为什么你不能使用不同的机制。不,那不是创建实例的时候。啊-那太完美了。谢谢你解释得这么清楚。我现在完全明白了。
private static Singleton singleton = new Singleton( );