将某物设置为 INSTANCE 而不是创建新对象是什么意思?

What does it mean to set something to an INSTANCE rather than create a new object?

我在互联网上的某个地方阅读了一些代码,我看到了这个有趣的部分,它引起了我的兴趣,我很好奇它是如何工作的。

有一个名为 ResourceManager 的 class,如下所示:

public class ResourceManager {
  private static final ResourceManager INSTANCE = new ResourceManager();

  public static ResourceManager getInstance() {

      return INSTANCE;
  }

}

(里面还有很多其他的东西,但我认为没有必要包括在内)。但是,我觉得有趣的是作者没有包含构造函数。事实上,在他的主要方法中,他只引用了这个 class 而不是创建一个新对象,他只是写了:

ResourceManager.getInstance().etc();

我以前从未见过这样的编码。我必须修改它,因为我需要一个 ResourceManager 对象才能使用,所以我所做的是:

ResourceManager res = ResourceManager.getInstance();

效果非常好。但是,我仍然不完全理解这里发生了什么。这个 class 是如何在没有构造函数的情况下创建的?

在 Java 中,假设您不提供构造函数,class 有一个默认构造函数。否则它看起来像 Singleton Pattern,来自维基百科 link,一种将 class 的实例化限制为一个对象的设计模式。 同样,要使它成为 正确的 Singleton 你应该添加一个 private 构造函数

private ResourceManager() {
  super();
}

否则有人可以实例化它。

这是 singleton pattern,这意味着永远只有一个 class ResourceManager 的实例(构造函数实际上应该是 private 来强制执行此操作) .

However, I still don't entirely understand what is going on here. How is this class being created without a constructor?

如果你不显式写构造函数,Java会自动插入一个default constructor(假设superclass也有默认构造函数)。

回答没有构造函数的问题:

所有 java class 没有定义构造函数的元素,都有一个 隐式 public 无参数构造函数。

但是,应该定义一个私有的无参数构造函数,因为这个class显然是一个单例。但是没有私有构造函数,可以随时创建新实例。