如何通过单例保证 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