Java学习笔记(疯狂Java讲义第三版)——缓存实例的不可变类

什么是缓存实例的不可变类?
该不可变类内部有一块区域,该区域可用来存储创建出来的实例。在使用该类型创建变量的时候,如果新创建的变量的内容和已存在实例的内容一样,那么直接返回已存在的实例而不会再创建新的对象。这样可以减少系统对于创建对象的开销,但是会浪费相应的存储空间用来缓存已存在的实例对象。
运行速度和存储空间二者有点此消彼长的意思,一般想要提高速度就会耗费更多的空间,想要节省空间也有可能降低运行速度。主要是根据实际需要来进行选择。
对于不可变类的实例来说,数值重复的对象是没有什么意义的,毕竟不可变类的实例永远不能被改变。也就是说两个数值一样的不可变类的对象将从使用上看永远一样。这就好比收集卡片的时候,两张完全一样的卡片对于收集是没有什么用的。所以,通常情况下,不可变类的实例都会建立相应的缓存区用来缓存已存在的实例。

如何创建一个缓存实例的不可变类?
首先,该类本身是一个不可变类。

其次,用private修饰构造器,使得无法在外界创建对象。同时提供一个专门用来创建对象的类方法。通过该方法创建对象的时候,会对对象进行判断,看该和该对象值一样的对象是否已经存在,已存在则返回已有的,不存在再创建。因为缓存实例的不可变类的关键一步就是新创建的对象要和缓存区中的对象进行比较。如果构造器为public修饰将会破坏这一规则,即外界可以通过构造器随意的创建对象。

再次,在该类内部定义一个缓存区,缓存区需要一个表示大小的变量,还需要一个指出已缓存元素的变量。因为创建对象的方法需要定义成一个类方法,而类方法中必然会调用有关缓存区的信息,所以缓存区及其相关信息都要用static修饰。(static修饰的成员无法直接访问非static修饰的成员)

以下为接下来代码中的关于缓存区案例的说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值