返回信息流/**
* 单例模式创新!google的ioc作者写的。只有在调用的时候才会初始化!而且线程安全
* 超级牛!
*
*/
public class Singleton {
static class SingletonHolder {
static Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
网上看到了这段,本身就不太懂,现在更不懂了,求大仙给讲解下。
这是一条镜像帖。来源:北邮人论坛 / java / #49103同步于 2016/4/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]单例
ymymrydzh
2016/4/8镜像同步26 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
singleton模式java书上都有介绍吧
构造方法私有,然后类中有静态的类对象
【 在 ymymrydzh (楼主有图) 的大作中提到: 】
: [code=java]
: /**
: ...................
从lz的问题可以看出,lz不懂类加载过程。。
1.外部类Test只有一个实例,既TestHolder.instance,该实例也是通过第四行,然后调用私有构造器创建出来的。
2.Test类只被实例化了一次。
3.TestHolder没有被实例化,因为是类的静态成员变量,无需实例化,代码中也没有实例化该类。
实际上,枚举类型写单例才是最佳实践,参见我的这篇博客:http://www.jianshu.com/p/d97bda9d5610
【 在 chenxiansf 的大作中提到: 】
: singleton模式java书上都有介绍吧
: 构造方法私有,然后类中有静态的类对象
那为什么在运行第4行之前就输出了Initialization,而运行第4行没有输出
【 在 John 的大作中提到: 】
: 从lz的问题可以看出,lz不懂类加载过程。。
: 1.外部类Test只有一个实例,既TestHolder.instance,该实例也是通过第四行,然后调用私有构造器创建出来的。
: 2.Test类只被实例化了一次。
: ...................
顺序是这样的。但是如果是new出来的,为什么在运行new这一样之前就输出了Initialization
【 在 liangdandan 的大作中提到: 】
: 应该先打印getInstance,再打印initialization吧。。返回的就是new出来的Test对象。
: 发自「贵邮」
Initialization就是在运行new那一行输出的,而new那一行是在TestHolder类加载的时候进行的,TestHolder类加载是在第一次用到TestHolder类的时候进行的,也就是返回TestHolder.instance的时候。
【 在 ymymrydzh 的大作中提到: 】
: 顺序是这样的。但是如果是new出来的,为什么在运行new这一样之前就输出了Initialization