java 线程安全的延迟初始化方案

public class InstanceFactory {
private static class InstanceHolder {
public static Instance instance = new Instance();
}

public static Instance getInstance() {
    return InstanceHolder.instance ;  //这里将导致InstanceHolder类被初始化
}

}

请问
1. private static class InstanceHolder是内部类?还是public class InstanceFactory中的一个类?
2.public static Instance getInstance(), 方法getInstance()的返回值类型是 Instance?

没有太看懂这段代码,麻烦各位老师指导。谢谢。

1.是个内部类
2.getInstance 返回的是InstanceHolder内部类的一个静态成员变量 该变量是个Instance的对象

 public class InstanceFactory {
private static class InstanceHolder {                       //private修饰,外界访问不到,内部使用
public static Instance instance = new Instance();                  //创建instance实例
}

public static Instance getInstance() { //提供外界获取instance实例的方法,返回类型取决public static Instance instance=new Instance(); 这一句
    return InstanceHolder.instance ;  //这里将导致InstanceHolder类被初始化
}

}

这个是内部类--
1.内部类可以很好的实现隐藏

一般的非内部类,是不允许有 private 与protected权限的,但内部类可以

2.内部类拥有外围类的所有元素的访问权限

3.可是实现多重继承

4.可以避免修改接口而实现同一个类中两种同名方法的调用。