Java 中的单例 class 个问题
Singleton class issues in Java
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
public static void main(String args[]) {
Singleton s = new Singleton();
Singleton s2 = new Singleton();
}
}
基于 "Effective Java",单例 class 类似于上面的内容。
假设我们在这个 class 里面有一个 main。我们可以根据需要多次启动单例class,比如
Singleton s1=new Singleton();
Singleton s2=new Singleton();
Singleton s3=singleton.getInstance();
Singleton s4=singleton.getInstance();
单例class应该是class只能启动一次,但是如果我们在上面声明多个实例,编译器不会报错,为什么?
单例 class 应该是 class 只能被其他 class 实体实例化一次。这通常是通过私有构造函数来实现的。但是,私有构造函数无法阻止 class.
中的实例化
不过你应该阅读这个问题:What is an efficient way to implement a singleton pattern in Java?
如果你遵循 Joshua Bloch 的想法并使用枚举来实现你的单例,那么即使在 class.
中你也无法破坏单例契约。
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
public static void main(String args[]) {
Singleton s = new Singleton();
Singleton s2 = new Singleton();
}
}
基于 "Effective Java",单例 class 类似于上面的内容。
假设我们在这个 class 里面有一个 main。我们可以根据需要多次启动单例class,比如
Singleton s1=new Singleton();
Singleton s2=new Singleton();
Singleton s3=singleton.getInstance();
Singleton s4=singleton.getInstance();
单例class应该是class只能启动一次,但是如果我们在上面声明多个实例,编译器不会报错,为什么?
单例 class 应该是 class 只能被其他 class 实体实例化一次。这通常是通过私有构造函数来实现的。但是,私有构造函数无法阻止 class.
中的实例化不过你应该阅读这个问题:What is an efficient way to implement a singleton pattern in Java?
如果你遵循 Joshua Bloch 的想法并使用枚举来实现你的单例,那么即使在 class.
中你也无法破坏单例契约。