静态代码块在类加载的时候执行一次,而静态内部类是调用方法才执行一次。出于节约资源的目的,单例模式采用了静态内部类,而没有采用静态代码块的形式。
static final要么直接赋值初始化,要么在静态代码块中赋值,因为static表明变量一开始就要被初始化null,final不可修改,那么该变量就会被定格为null,这样做没有修改的余地也没有意义。
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHolder.INSTANCE;
}
}