`

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

阅读更多

你可能需要编写只包含静态方法和静态域的类。
这样的工具类不希望被实例化,实例化对他没有任何意义。

(企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的)

工具类(util)就是一类不该被实例化类的代表。它们只是提供一些实用功能,实例化之是毫无意义的。

demo:

 

  1. // Noninstantiable utility class  
  2. public class UtilityClass {  
  3.     // Suppress default constructor for noninstantiability  
  4.     private UtilityClass() {  
  5.         throw new AssertionError();  
  6.     }  
  7. }  

 

 

这种惯用法的副作用:它使得一个类不能被子类化。所有的构造器都必须显示或隐式的调用超类构造器。在这种情形下子类就没有可访问的超类构造器可调用了。

分享到:
评论

相关推荐

    Java经典编程源码基础例程300.zip

    实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的私有域 113 实例075 动态调用类中方法 115 实例076 动态实例化类 116 ...

    【04-面向对象(上)】

    •初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参。 静态初始化块 •用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块 , ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例150 实例化Class类的5种方式 196 实例151 获得Class对象表示实体的名称 197 实例152 查看类的声明 198 实例153 查看类的成员 199 实例154 按继承层次对类排序 201 实例155 查看内部类信息 202 7.2 反射的进阶 ...

    2024最新的面试题来了

    为了防止这种漏洞,可以在单例类的私有构造方法中添加逻辑判断,禁止通过反射创建多个实例。 JVM常用配置参数是指在Java虚拟机上运行应用程序时可以设置的一些参数。这些参数可以调整JVM的性能、内存管理、垃圾回收...

    【JVM和性能优化】4. 编写高效优雅Java代码常用方法

    不需要实例化的类构造器要私有化3. 不要创建不必要对象4. 避免使用终结方法5. 类跟成员的可访问性最小化6. 使可变性最小化7. 优先使用复合胜过继承8.接口优于抽象类9. 可变参数谨慎使用10. 尽量不要返回NULL,尽量...

    【05-面向对象(下)】

    把基本数据类型变量包装类实例是通过对应包装类的构造器来实现的,不仅如此,8个包装类中除了 Character之外,还可以通过传入一个字符串参数来构建包装类对象。 •如果希望获得包装类对象中包装的基本类型...

    账户类(ATM)三个版本

    ■ 一个能创建带特定id 和初始余额的构造方法,初始余额不能为负数。 ■ id、balance 和annualInterestRate 的访问器和修改器。 ■ dateCreated 的访问器。 ■ 一个名为getMonthlyInterestRate 的方法返回月利率。 ...

    PHP 面向对象技术(全面讲解).txt

    上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以 我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定义规则就可 以做的出来,那么难点在那里呢?...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    8.2 实例构造器和结构(值类型) 8.3 类型构造器 8.3.1 类型构造器的性能 8.4 操作符重载方法 8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种...

    CLR.via.C#.(中文第3版)(自制详细书签)

    8.2 实例构造器和结构(值类型) 8.3 类型构造器 8.3.1 类型构造器的性能 8.4 操作符重载方法 8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    8.2 实例构造器和结构(值类型) 8.3 类型构造器 8.3.1 类型构造器的性能 8.4 操作符重载方法 8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    8.2 实例构造器和结构(值类型) 8.3 类型构造器 8.3.1 类型构造器的性能 8.4 操作符重载方法 8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种...

    javaSE代码实例

    10.4.3 不能继承构造器 186 10.4.4 调用兄弟构造器 187 10.5 单列模式 189 10.6 Java程序的加载过程 190 10.7 小结 192 第三篇 高级基础篇 第11章 异常处理——Java世界的医生 195 11.1 异常处理的...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。 1.8.4 对象的引用 对象的使用包括引用对象的成员变量和方法,通过运算符·可以实现对变量的访问和方法的调 用,变量和方法可以通过设定一定的...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     6.18.1 不可变性给元组带来了什么影响   6.18.2 元组也不是那么“不可变”   6.18.3 默认集合类型   6.18.4 单元素元组   6.18.5 字典的关键字   6.19 相关模块   6.20 *拷贝python对象、浅...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     6.18.1 不可变性给元组带来了什么影响   6.18.2 元组也不是那么“不可变”   6.18.3 默认集合类型   6.18.4 单元素元组   6.18.5 字典的关键字   6.19 相关模块   6.20 *拷贝python对象、浅...

Global site tag (gtag.js) - Google Analytics