前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Effective Java 第二版 学习笔记(3) 创建和销毁对象-私有构造器、避免创建不必要的对象

Effective Java 第二版 学习笔记(3) 创建和销毁对象-私有构造器、避免创建不必要的对象

作者头像
发布2019-01-07 12:59:54
5010
发布2019-01-07 12:59:54
举报
文章被收录于专栏:WD学习记录WD学习记录

参考:Effective Java 第二版 第二章

通过私有构造器强化不可实例化的能力

有时候,可能需要编写只包含静态方法和静态域的类。这样的工具类不希望被实例化,实例对它没有任何意义。然而,在缺少显式构造器的情况下,编译器会自动提供一个公有的、无参的缺省构造器。

企图通过将类做成抽象类来强制该类不可被实例化是行不通的。该类可以被继承,子类可以被实例化,会误导用户以为这种类是专门为了继承而设计的。

只要让类包含私有构造器,就不可以被实例化了。保证该类在任何情况下都不会实例化。

这种习惯用法的副作用是,使得一个类不能被子类化,所有的构造器必须显式或隐式调用超类构造器,在这种情况下,子类就没有可以访问的超类构造器可以调用。

避免创建不必要的对象

一般来说,最好重用对象而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速,又流行。如果对象是不可变的,它就始终可以被重用。

对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。

除了重用不可变的对象之外,也可以重用哪些已知不会被修改的可变对象。

考虑适配器情形,适配器:把功能委托给一个后备对象,从而为后备对象提供一个可以替代的接口。由于适配器除了后备对象之外没有其他的状态信息,所以针对某个给定对象的特定适配器而言,不需要创建多个适配器实例。

要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。

小对象的构造器只做很少量的显式工作,小对象的创建和回收是非常廉价的。通过创建附加对象,提升程序的清晰性、简洁性和功能性。

通过维护自己的对象池来避免创建对象并不是一种好的做法,除非池中的对象是非常重量级的。一般而言,维护自己的对象池必定会把代码弄得很乱,同时增加内存占用,并且还会损害性能。现代的JVM实现具有高度优化的垃圾回收,其性能很容易就会超过轻量级对象池的性能。

注意,在提倡使用保护性拷贝的时候,因重用对象而付出的代价要远远大于因创建重复对象而付出的代价。必要时如果没能实施保护性拷贝,将会导致潜在的错误和安全漏洞,而不必要的创建对象只会影响程序的风格和性能。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通过私有构造器强化不可实例化的能力
  • 避免创建不必要的对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档