【发布时间】:2016-08-29 14:11:07
【问题描述】:
我有这样的代码:
class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {
System.out.println("Singleton constructed.");
}
public static Singleton getInstance() {
return INSTANCE;
}
}
当我们没有 getInstance 的任何其他静态方法时,这个单例延迟初始化了吗?据我所知,类仅在某些情况下被初始化,例如:
- 使用 new() 关键字或使用创建类的实例 使用 class.forName() 进行反射,这可能会抛出 Java 中的 ClassNotFoundException。
- 调用了 Class 的静态方法。
- 已分配静态字段 Class。
- 使用了类的静态字段,它不是常量变量。
- 如果 Class 是顶级类,并且执行词法嵌套在类中的断言语句。
所以当唯一的静态方法是 getInstance 并且构造函数是私有的时,除了使用 getInstance 方法(除了反射)之外,不可能以任何其他方式初始化 Singleton 类。所以这个对象只在我们需要的时候才被创建,所以它是一个惰性初始化,对吧?或者我错过了什么?
【问题讨论】:
标签: java singleton lazy-initialization