单例模式对象实例化的时间

时间:2014-08-29 00:45:03

标签: java singleton

这看起来似乎是一个愚蠢的问题,但是当我按照单例模式创建一个类时,我正在游荡,在什么时候对象被实例化?

e.g。 private static SingleObject instance = new SingleObject();

使用方法getInstance()定义:

public static SingleObject getInstance(){ 
    return instance; 
} 

所以'实例'是一个静态变量,它引用SingleObject的一个实例。但它在什么时候实际实例化并加载到内存中? (如果这有意义的话)

2 个答案:

答案 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有几个不同实现的例子。