方式一:
使用时才进行初始化,包括私有的构造方法,私有的全局静态变量,公有的静态方法。
public class Singleton {
private static Singleton instance;//私有静态变量
//私有构造方法
private Singleton() {
System.out.println("初始化");
}
//公有静态方法,暴露使用
public static Singleton getInstance() {
if(instance ==null) {
instance =new Singleton();
}
return instance;
}
}
方式二:
执行效率相对较高,在类加载时初始化,会浪费内存。
public class Singleton{
private static final Singleton instance =new Singleton();
private Singleton() {
System.out.println("初始化");
}
public static Singleton getInstance(){
return instance;
}
}
方式三:
静态内部类实现,当Singleton 类被加载时,instance 还未被初始化。调用 getInstance 方法时,会显示加载 SingletonHolder 类,从而实例化 instance。
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE =new Singleton();
}
private Singleton() {
System.out.println("初始化");
}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}