这看起来似乎是一个愚蠢的问题,但是当我按照单例模式创建一个类时,我正在游荡,在什么时候对象被实例化?
e.g。 private static SingleObject instance = new SingleObject();
使用方法getInstance()
定义:
public static SingleObject getInstance(){
return instance;
}
所以'实例'是一个静态变量,它引用SingleObject的一个实例。但它在什么时候实际实例化并加载到内存中? (如果这有意义的话)
答案 0 :(得分:1)
它实例化了加载类的时间(即静态成员的初始化时间),这是第一次对此类进行任何引用。如果getInstance
是此类导出的唯一成员(即可从此类外部访问的唯一方法或成员),则在第一次调用getInstance()
时创建实例。
答案 1 :(得分:1)
这取决于。 Singleton模式的典型实现如下:
class SingleObject {
private static SingleObject instance;
private SingleObject(){
}
public SingleObject getInstance() {
if(instance == null) {
instance = new SingleObject();
}
return instance;
}
}
在这种情况下,它在第一次调用getInstance
时被实例化。但是,关于何时需要完成,没有普遍的规则。 Singleton也可以实现为:
class SingleObject {
private static SingleObject instance = new SingleObject();
private SingleObject(){
}
public SingleObject getInstance() {
return instance;
}
}
在这种情况下,它将在类加载时实例化。 Wikipedia有几个不同实现的例子。