一、饿汉式
//类装载的时候完成初始化,避免了多线程问题,
//缺点: 在装载的时候完成初始化,内存可能浪费
class Singleton {
private Singleton() {
}
private final static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
二、静态代码块
.静态代码块执行时,创建单例对象, 类装载的时候,创建对象
class Singlton {
private Singlton() {
}
static {
instance = new Singlton();
}
private static final Singlton instance;
public static Singlton getInstance() {
return instance;
}
}
三、双重检查方式实现
class Sington{
private Sington(){}
private static Sington instance;
public static Sington getInstance(){
if (instance==null){
synchronized (Sington.class) {
if (instance ==null){
instance =new Sington();
}
}
}
return instance;
}
}
四、静态内部类
1.类加载时,静态内部类会被 加载 ,内部类变量要 用 private ,static final 修饰
2.返回内部类的成员变量
class Singleton{
private Singleton(){}
private static class inner{
private static final Singleton instance =new Singleton();
}
public Singleton getInstance(){
return inner.instance;
}
}
五、枚举
enum Singleton{
instance;
}