请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

类初始化时机的问题。

public class Singleton {
	private static Singleton singleton = new Singleton();
	private Singleton() {}
	public static Singleton getSingleton() {
		return singleton;
	}
}

这种方式为什么不是懒加载呢?不是只有访问到getSingleton这个static的方法时,才初始化吗?

类的初始化情况有:

  1. 遇到 new, getstatic, putstatic 或 invokestatic 这四条字节码指令时,如果类没有进行初始化,则需要触发初始化
  2. 使用java.lang.reflect包的方法进行反射调用时
  3. 当初始化一个类,如果发现其父类还没有初始化,先初始化父类
  4. 当虚拟机启动时,用户指定一个要执行的主类,虚拟机会先初始化这个主类

正在回答 回答被采纳积分+3

1回答

q_秋白 2019-03-19 16:28:49

private static Singleton singleton = new Singleton();

在这一句当中singleton是作为一个静态成员变量的,一个静态成员变量当且仅当类初次被加载当时候完成初始化。所以在加载类Singleton的时候就已经完成了它的初始化,而不是调用getSingleton()才完成初始化
。因此这是饿汉式。

0 回复 有任何疑惑可以回复我~
  • 提问者 new_chapter #1
    首先,感谢你的回答。
    
    在饿汉式那一节,给力老师指出了只有用final关键字修饰,才会保证在类加载的时候去初始化单例。并且我也在问题中列出了初始化的时机。所以我认为这个还是一个懒汉式。
    
    那么,用内部类的好处在哪里呢?
    回复 有任何疑惑可以回复我~ 2019-03-21 16:19:50
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信