【发布时间】:2017-07-05 16:35:13
【问题描述】:
我有一些这样的代码
public class MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton(){}
public static MySingleton getInstance() {
return instance;
} }
这是 Java 中单例模式的饥饿实现,我们知道在调用 getInstance 之前已创建实例。
我们还知道在实例化 MySingleton 类时会实例化静态成员。只有在上面的代码中调用了 getInstance 时,才会实例化类 MySingleton。因此,实例是在调用 getInstance 之后创建的。
那么哪一个是对的??
为什么?
问题不重复。
它没有谈论静态类初始化何时发生,而是对单例模式的饥饿实现存在一些疑问。
在这种情况下,这个问题中发布的类几乎肯定不会在第一次调用 getInstance 之前被初始化。
【问题讨论】:
-
我不清楚这个问题是否与“静态类初始化何时发生?”重复。这个问题是关于建议的单例实现的正确性。
-
在这种情况下,类成员在类被实例化后不会被实例化,它在类被初始化时被实例化,在这种情况下,也是在第一次调用
getInstance时。但是,请记住,这是单例的不必要的复杂实现。更简单的是public enum Singleton { INSTANCE; }。