关于饿汉式和懒汉式的代码实现方式

关于饿汉式和懒汉式的代码实现方式

# 具体遇到的问题

饿汉式是类加载的时候先实例化,再调用getInstance(),而懒汉式是先调用getInstance(),再实例化,

问题1:因为是static类型,实际上不都是实例化一次么。

问题2:关于说懒汉式是在第一次使用时实例化,饿汉式和懒汉式在使用上都是"SingletonOne.getInstance();",我觉得没啥区别啊。

问题3:为什么说饿汉式是拿空间换时间,懒汉式是拿时间换空间呢

# 报错信息的截图

# 相关课程内容截图


# 尝试过的解决思路和结果


# 粘贴全部相关代码,切记添加代码注释(请勿截图)

SingletonOne one=SingletonOne.getInstance();//饿汉式

SingletonTwo one1=SingletonTwo.getInstance();//懒汉式

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、同学的说法是正确的,static是静态的,只会执行一次。

    2、饿汉式在类加载时创建实例,创建实例时就会调用构造方法完成实例构造;而类加载是当Java虚拟机第一次需要使用类信息时就会进行类加载。

http://img1.sycdn.imooc.com//climg/5fcf289f0940f00608690521.jpg

如上所示,只有在调用getInstance时,才会去判断是否存在,再来创建对象。

    而饿汉式中的静态对象是随着类的加载而加载的,就是说当加载这个SingletonOne类时,就执行创建对象的private static SingletonOne instance=new SingletonOne(); 句话

http://img1.sycdn.imooc.com//climg/5fcf294a09b9a2fd09640486.jpg

如上所示,在调用getInstance时,对象已经创建完成了,只是此时才去返回给调用者。

    ​3、如上所描述的,饿汉式是在调用getInstance时,对象的创建已经完成,直接就可以返回,好处就是时间快,因为对象已经完成创建了,缺点就是还没有使用时,这个对象一直在占据着空间,所以说饿汉式是拿时间换空间。

反之懒汉式只在调用时,才会去创建对象,在创建时会耗费时间对一点,但是好处就是没有一直有一个对象占用空间,所以说是懒汉式是拿时间换空间。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师