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( );