有时候你可能会编写出只包含静态方法和静态域的类,这样的类有一些很不好的名声,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。尽管如此,它们也确实有它们特有的用处,我们可以利用这种类,把操作在原语类型的值或者数组类型上的相关方法组织起来,例如java.lang.Mala或者java.util.Arrays;我们也可以把操作在实现特定接口的对象上的方法组织起来,例如java.util.Collections。我们还可以利用这种类把操作子final类上的方法组织起来,以取代扩展该类的做法。

这样的工具类不希望被实例化,对它进行实例化没有任何意义。然而,在缺少显示构造函数的情况下,编译器会自动提供一个公有的、无参数的默认构造函数。对于用户而言,这个构造函数与其他的构造函数没有任何区别,在已发行的API中常常可以看到一些被无意识地实例化的类,这样的情形并不少见。
企图通过将一个类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。更进一步,这样做会误导用户,以为这种类是专门为了继承而设计的。然而,有一些简单的习惯用法可以确保一个类不可被实例化。由于只有当一个类不包含显式的构造函数的时候,编译器才会生成默认构造函数。所以,我们只要让这个类包含单个显式的私有构造函数,则它就不可被实例化了:

public class UtilityClass
{private UtilityClass(){}
}

因为显式构造函数是私有的,所以在该类的外部它是不可被访问的。假设该构造函数不会被类自身从内部调用,就能保证该类永远不会被实例化,这种习惯用法有点违反直觉,好像构造函数就专门设计成不能被调用一样,神坑!所以,机智的程序员们的做法是在代码中对构造函数的作用加一些注释。
这种习惯用法也有副作用,它使得一个类不能被子类化。所有的构造函数都必须要调用一个可访问的超类构造函数,无论显式或者隐式地调用,在这种情形下,子类就没有可访问的构造函数来调用了。

转载于:https://www.cnblogs.com/ainima/p/6331847.html

Java性能优化(3):通过私有构造函数强化不可实例化的能力相关推荐

  1. Java性能优化(12):最小化类和成员可访问能力

    类和接口是Java程序设计语言的核心,它们也是Java语言的基本抽象单元.Java语言提供了许多强大的基本元素,供程序猿来设计类和接口. 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是 ...

  2. 第四条:通过私有构造器强化不可实例化的能力

    有时候我们可能需要编写只包含静态方法和静态域的类,例如某些工具类. 如java.lang.Math 或者 java.util.Arrays 这样的工具类不希望被实例化,因为实例对于它们没有任何意义. ...

  3. 推荐:Java性能优化系列集锦

    Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演 ...

  4. Java性能优化技巧

    Java性能优化技巧 参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序 ...

  5. java 性能 优化_Java十大简单性能优化

    java 性能 优化 关于" web scale "这个流行词有很多炒作,人们花了很多时间来重新组织他们的应用程序体系结构,以使其系统"规模化". 但是什么是扩 ...

  6. Java性能优化,操作系统内核性能调优,JYM优化,Tomcat调优

    文章目录 Java性能优化 尽量在合适的场合使用单例 尽量避免随意使用静态变量 尽量避免过多过常地创建Java对象 尽量使用final修饰符 尽量使用局部变量 尽量处理好包装类型和基本类型两者的使用场 ...

  7. 拉勾教育 | Java 性能优化实战 21 讲

    开篇词 开篇词 | Java 性能优化,是进阶高级架构师的炼金石 你好,我是李国.作为<Java 性能优化与面试 21 讲>这个课程的作者,我先来简单介绍下自己. 我曾任京东金融.陌陌科技 ...

  8. [原创]Java性能优化权威指南读书思维导图

    [原创]Java性能优化权威指南读书思维导图 书名:Java性能优化权威指南 原书名:Java performance 作者: (美)Charlie Hunt    Binu John 译者: 柳飞 ...

  9. java strim性能_你所不知道的Java性能优化之String!

    Java性能优化之String字符串优化 1.字符串对象及其特点 Java中八大基本数据类型没有String类型,因为String类型是Java对char数组的进一步封装. String类的实现主要由 ...

最新文章

  1. 既往出现中性粒细胞减少的患者可以重新应用依那西普
  2. Android Studio教程10-Intent的详细使用
  3. webstorm下debug调试react js程序
  4. 控件属性、事件持久化(转)
  5. Android SDK 2.3/3.0/4.0/4.2 下载与安装教程
  6. deb php7 fileinfo,linux安装php7.2扩展fileinfo
  7. mysql链式复制_MySQL主从服务器链式复制配置(ubuntu)
  8. Jenkins 学习总结(8)—— Jenkins X 入门实践
  9. python 删除断点_给 Python 开发者的四条忠告!强烈建议收藏
  10. android apk获取系统签名
  11. 安卓内录声音软件scr_录屏内录大师软件下载
  12. HttpSession详解(简称session)
  13. Error: EBUSY: resource busy or locked, lstat ‘D:\pagefile.sys‘
  14. php开发天气可视化,R语言天气可视化应用 | 粉丝日志
  15. 汉语拼音文件搜索项目
  16. C语言代码老师,王耀辉老师给出的178个经典c语
  17. [转] 25岁,我习得了自愈近视的魔法
  18. 仿IOS沉浸式状态栏实现
  19. 动态和静态查看一个进程的内存使用
  20. VUE2版本引入Element UI

热门文章

  1. Error: Cannot find module 'babel-runtime/regenerator'
  2. 服务端发post请求产生的编码问题
  3. sp_MSforeachtable使用方法
  4. 【讀書筆記】人人都是产品经理
  5. 谨慎使用PHP的引用
  6. Android:学习AIDL,这一篇文章就够了(下)
  7. 自己动手实现OpenGL!
  8. Android 三角形控件
  9. 【剑指offer-Java版】14调整数组顺序使奇数位于偶数前面
  10. android系统默认铃声,Android系统修改默认铃声