静态内部类是用static修饰的内部类。在jvm层面中,当外部类加载时并不会加载静态内部类。所以静态内部类可以实现懒汉单例模式并保证其线程安全
public class Singleton {
private Singleton() {
}
private static class SingletonBuilder {
private static final Singleton s = new Singleton();
}
public static Singleton getInstance() {
return SingletonBuilder.s;
}
}
如果不使用静态内部类的方法创建线程安全的懒汉单例对象,那么需要使用一个双重检查的方式来保证线程安全
public class Singleton {标签:Singleton,内部,静态,private,static,new,作用 From: https://www.cnblogs.com/dujl/p/17045605.html
private Singleton() {
}
private static Singleton s ;
public Singleton getInstance() {
if (s==null){
synchronized (this){
if (s==null){
s=new Singleton();
}
}
}
return s;
}
}
静态内部类还可以用来实现建造者模式
当考虑到一个大对象由几个小对象组成,那么此时可以考虑使用建造者模式,之所以要用静态内部类是因为建造者模式中的建造者只是为了建造最大的那个对象服务,只需要服务一个类,所以此时可以使用内部类
但如果使用普通内部类,那么当程序运行时会创建两个大对象,就是使用普通内部类则需要先new一个外部类,在new一个内部类,此时创建了一个大对象,当构建好大对象时此时又会创建一个大对象,造成内存的浪费