BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #49103同步于 2016/4/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[问题]单例

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