将某些内容设置为INSTANCE而不是创建新对象意味着什么?

时间:2015-01-04 02:57:22

标签: java instance

我正在互联网上的某处阅读一些代码,我看到这篇有趣的文章引起了我的兴趣,我很好奇它是如何运作的。

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

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

  public static ResourceManager getInstance() {

      return INSTANCE;
  }

}

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

ResourceManager.getInstance().etc();

我以前从未见过这样的编码。我不得不修改它,因为我需要一个ResourceManager对象来工作,所以我做的是:

ResourceManager res = ResourceManager.getInstance();

哪个工作得很好。但是,我仍然不完全理解这里发生了什么。如果没有构造函数,这个类是如何创建的?

3 个答案:

答案 0 :(得分:8)

这是singleton pattern,意味着只有一个类ResourceManager的实例(构造函数应该是private才能强制执行此操作。)

  

但是,我仍然不完全理解这里发生了什么。如果没有构造函数,这个类是如何创建的?

如果您没有显式编写构造函数,Java将自动插入default constructor(假设超类也有一个默认构造函数)。

答案 1 :(得分:1)

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

所有没有定义构造函数的java类都有一个隐式 public no-args构造函数。

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

答案 2 :(得分:0)

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

private ResourceManager() {
  super();
}

否则有人可以实例化它。