请参考以下代码并帮助我理解为什么这不是一个有效的单例实现。
class A{
private static A ob;
private A(){}
static {
ob = new A();
}
public static A getInstance() {
return ob;
}
}
答案 0 :(得分:4)
它不是一个有效的单例(可以实例化多个实例),因为你得到了default constructor。添加private
构造函数(这将阻止插入默认构造函数)。你可能想要覆盖clone()
。
private A() {
}
@Override
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException(this.getClass().getName()
+ ": is a singleton.");
}
答案 1 :(得分:3)
通过调用A
,没有什么能阻止我创建new A()
的新实例,所以我可以有多个实例。