有时候我们可能需要编写只包含静态方法和静态域的类,例如某些工具类。

如java.lang.Math 或者 java.util.Arrays

这样的工具类不希望被实例化,因为实例对于它们没有任何意义。

如果不手写提供一个构造器,编译器会为这个类提供一个public的构造器,所以我们可以通过手写提供一个私有化的

构造器,从而来阻止这样的工具类来产生实例。

在这个私有的构造器里面,我们可以抛出一个AssertionException异常,从而进一步阻止它在这个类内被调用。

因为提供了私有化的构造器,而且没有提供其他的构造器,这样的类就不能被子类化了,因为子类总会显示或者隐式的调用父类构造器一次。

因为子类没有可以访问的父类构造器了。

转载于:https://www.cnblogs.com/wangliyue/p/4432638.html

第四条:通过私有构造器强化不可实例化的能力相关推荐

  1. Effective Java之通过私有构造器强化不可实例化能力(四)

    比如很多工具类,成员都是静态的,你写这个类的原因是想拿来直接用,而不需要实例化的 但是在缺少显示构造函数的时候,编译器会给你默认生成一个构造函数,这样这个类就有可能实例化 企图将类做成抽象类来强制该类 ...

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

    有时候你可能会编写出只包含静态方法和静态域的类,这样的类有一些很不好的名声,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序.尽管如此,它们也确实有它们特有的用处,我们可以利用这种类,把操作 ...

  3. Java九十条经验法则之第三条:用私有构造器或者枚举类型强化Singlen对象

    Singlen,顾名思义,为单例,创建单例模式的对象有很多种方式,主要有如下三种方式: 1.调用对象的方法,如下: 2.利用静态工厂的方式获取单例对象,例如: 3.使用枚举类的方式,例如: 这种方式最 ...

  4. 【Effective Java】第二章:静态工厂、构建器、强化Singleton属性、私有构造器、

    文章目录 一. 用静态工厂方法代替构造器 优势: 劣势: 实例代码: 二. 遇到多个构造器参数时要考虑使用构建器 ① 重叠构建器 ② JavaBeans模式 ③ Builder模式 三. 用私有构造器 ...

  5. 用私有构造器或者枚举类型强化Singleton 属性

    Singleton 是仅仅被实例化一次,Singleton通常被代表一个无形状对象 实现Singleton有两种常见的方法.这两种构造器方法都要保持构造器私有,并导出公有的静态成员,以便客户端能够访问 ...

  6. 用私有构造器或枚举类型强化Singleton属性(3)

    2019独角兽企业重金招聘Python工程师标准>>> 1.Singleton 代表那些本质上唯一的系统组件.增加客户端调试难度 2.Singleton 实现方法1: 构造器保持私有 ...

  7. 【四】多智能体强化学习(MARL)近年研究概览 {Learning cooperation(协作学习)、Agents modeling agents(智能体建模)}

    相关文章: [一]最新多智能体强化学习方法[总结] [二]最新多智能体强化学习文章如何查阅{顶会:AAAI. ICML } [三]多智能体强化学习(MARL)近年研究概览 {Analysis of e ...

  8. mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...

    [单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...

  9. 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...

    有两种方法: 第一种方法: 一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future( ...

最新文章

  1. MiniGUI - UNIX Domain Socket 封装
  2. 【廖雪峰python入门笔记】for循环
  3. 第一课--EFM32GG11系列--点亮LED灯
  4. FMCW雷达书籍分享 FMCW radar design
  5. vue.directive自定义指令 vue.set使用示例
  6. 【MyBatis使用】mapper.xml 中特殊符号的 2 种处理方法(CDATA区+替代字符举例)
  7. ABAP gateway里OData url里的select操作是如何在后端实现的
  8. 当医学影像遇见深度学习,MIDL 2020 论文征稿
  9. c++框架有哪些_平顶彩钢活动房特点以及用途有哪些?
  10. JAVA-java内存分配
  11. 连续液位测量行业调研报告 - 市场现状分析与发展前景预测
  12. 云服务售后服务调研,参与问卷送福利!
  13. Nvidia风扇速度自动调节工具推荐
  14. 记GMGDC2013大会
  15. 多行文本垂直居中的三种方法
  16. 基于Linux centos7 搭建内网服务器,并通过外网访问
  17. SSD时代,你的固态硬盘选哪款?
  18. CAD绘图设计中怎样删除CAD图层?怎样清理CAD图层文件?
  19. 英飞凌硅麦焊接注意事项
  20. DSP F2803x中CLA模块介绍

热门文章

  1. 机器学习基础专题:高斯分布
  2. Asp.net Mvc Post ID Bug
  3. 委托、多播委托(MulticastDelegate)
  4. JavaScriptjQuery.查询DOM元素
  5. AJAX实现简单的注册页面异步请求
  6. APACHE多个服务器的配置
  7. 4.01~~Median
  8. 小问题(可能持续更新)
  9. svn提示服务器禁止修改目录,SVN Eclipse插件中如何忽略对服务器已有文件修改后的提交...
  10. dell存储Linux配置,Dell MD3200远程存储的特殊配置