具有静态初始化块的单例

时间:2015-10-07 13:03:09

标签: java singleton

请参考以下代码并帮助我理解为什么这不是一个有效的单例实现。

class A{
    private static A ob;

    private A(){}
    static {
        ob = new A();
    }
    public static A getInstance() {
        return ob;
    }
}

2 个答案:

答案 0 :(得分:4)

它不是一个有效的单例(可以实例化多个实例),因为你得到了default constructor。添加private构造函数(这将阻止插入默认构造函数)。你可能想要覆盖clone()

private A() {
}

@Override
public Object clone() throws CloneNotSupportedException {
    throw new CloneNotSupportedException(this.getClass().getName() 
            + ": is a singleton.");
}

我通常会使用enum to implement a singleton

答案 1 :(得分:3)

通过调用A,没有什么能阻止我创建new A()的新实例,所以我可以有多个实例。