单例模式中常用的一种饿汉模式实现是用内部类实现的,但是并不理解为什么是饿汉,不是懒汉呢,于是写了下面的测试程序,得到结果:并不是InnerClass外部类初始化,其内部类JobSchedulerHolder就初始化。
public class InnerClass{
private static class JobSchedulerHolder{
private static InnerClass instance = new InnerClass();
static{
System.out.println("内部类初始化");
}
}
private InnerClass(){
}
static{
System.out.println("外部类初始化");
}
public static InnerClass getInstance(){
return JobSchedulerHolder.instance;
}
public static void main(String[] args){
InnerClass i = new InnerClass();
System.out.println("------------");
// InnerClass.getInstance();
}
}
执行结果
外部类初始化
------------
public class InnerClass{
private static class JobSchedulerHolder{
private static InnerClass instance = new InnerClass();
static{
System.out.println("内部类初始化");
}
}
private InnerClass(){
}
static{
System.out.println("外部类初始化");
}
public static InnerClass getInstance(){
return JobSchedulerHolder.instance;
}
public static void main(String[] args){
// InnerClass i = new InnerClass();
// System.out.println("------------");
InnerClass.getInstance();
}
}
执行结果
外部类初始化
内部类初始化