Effective Java (4) 通过私有构造器强化不可实例化的能力

一、背景

对于有些工具类如java.lang.Math、java.util.Arrays等,它们只包含静态方法和静态域字段,对于这样的类实例化没有什么任何意义。但在实际使用中,如果不加任何特殊处理,这样的类还是可以像其他类一样可以被实例化。

二、处理办法

将构造函数设置为private,这样外部类无法实例化该类,同时在这个私有的构造函数中直接抛出异常,从而避免在类的内部实例化。

public class UtilityClass {
    // 私有的构造器,内部实例化会抛出异常
    private UtilityClass() {
        throw new AssertionError();
    }
}

三、好处和弊端

这样定义之后,类在内部和外部都不能被实例化了,否则会发生编译错误或抛出异常,但副作用是这个类将不能被子类化了。

作者:csdn博客 zdp072

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索异常
, 实例
, 函数
, 静态
, 实例化
, 构造器
, java实例
, 私有
, 无法实例化
Java类实例化
私有财产神圣不可侵犯、私有构造函数、构造函数私有化、java私有构造函数、构造方法私有化,以便于您获取更多的相关知识。

时间: 2024-08-31 07:48:30

Effective Java (4) 通过私有构造器强化不可实例化的能力的相关文章

Effective Java(3) 用私有构造器或者枚举类型强化Singleton属性

一.背景 所谓的Singleton是指仅仅被实例化一次的类,Singleton通常被用来代表那些本质上唯一的系统组件. 实现Singleton有以下三种方法: ①. 私有构造器,公有静态final域. ②. 私有构造器,公有静态工厂方法. ③. 单元素枚举类型(首选). 二.私有构造器,公有静态final域 public class Singleton1 { public static final Singleton1 INSTANCE = new Singleton1(); // 公有静态fi

和我一起学Effective Java之创建和销毁对象

前言 主要学习创建和销毁对象: 1.何时以及如何创建对象 2.何时以及如何避免创建对象 3.如何确保它们能够适时地销毁 4.如何管理对象销毁之前必须进行的清理动作 正文 一.用静态工厂方法代替构造器 获取类的实例的常用方法有: 1.公有的构造器 2.公有的静态工厂方法 下面通过Boolean类(基本类型boolean的包装类)的简单示例来学习: //公有的构造器 public Boolean(String s) { this(parseBoolean(s)); } //公有的静态工厂方法 pub

《Effective Java》—— 创建与销毁对象

本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑用静态工厂方法代替构造器 使用静态工厂的优势: 有名称 不必每次调用的时候都创建一个新的对象 返回原返回类型的任何子类型对象 在创建参数化类型实例时,代码更加简洁. 使用静态工厂的缺点: 类如果不包含公有的或者受保护的构造器,就不能被子类化 与其他的静态方法实际上没有任何区别 举个例子: public cla

effective java 学习笔记(一)

           最近在豆瓣上看到一些书评,很有感想,其中有一本叫 effective java据说很好,下载了看看,果然大作,很多东西都读不懂,功力尚浅,还得继续努力.读的时候感觉很爽,比讲语法的书好看多了. 第一部分 对象的创建和销毁. 讲了5条原则 1.用静态的工厂方法代替构造函数. 好处:避免创建重复的对象,因为静态的方法不许要创建对象就可以使用,造成不必要的浪费.重复返回同一个对象.保证单态. 工厂方法可以取更加容易记的名字,而构造函数则不行. 工厂方法可以返回一个原返回类型的子类

Effective Java 笔记

创建和销毁对象 NO.1 考虑用静态工厂方法代替构造函数 静态工厂方法好处: 1.构造函数有命名的限制,而静态方法有自己的名字,更加易于理解. 2.静态工厂方法在每次调用的时候不要求创建一个新的对象.这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能.它使得一个类可以保证是一个singleton:他使非可变类可以保证"不会有两个相等的实例存在". 3.静态工厂方法在选择返回类型时有更大的灵活性.使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,还可以创建

Effective Java (2) 遇到多个构造器参数时要考虑用构建器

一.背景 对于有多个可选参数的类,我们一般通过什么办法传递参数呢?这里提供了三种办法: ①. 重叠构造器模式 ②. JavaBeans模式 ③. Builder构建器模式 下面我们来分析一下以上三种方法的优势及弊端. 二.重叠构造器模式 重叠构造器模式中第一个构造器中只有必要参数,第二个构造器有一个可选参数,第三个构造器中有两个可选参数,依次类推,最后一个构造器中包含所有可选参数.这种方案可行,但是有较大缺陷. 缺点:当有很多可选参数的时候,客户端代码很难编写,并难以阅读,如果客户端不小心颠倒了

Effective Java (1) 考虑用静态工厂方法代替构造器

一.前言 从今天开始计划用一个月的时间,通过写读书笔记的方式来记录阅读这本Java领域经典中的经典书籍 - Effective Java过程中自己所思所想,以备以后查阅,同时分享出去也希望可以帮助到其他人,废话不多说,现在开始第一篇:创建和销毁对象. 二.考虑用静态工厂方法代替构造器 ①. 一般我们有什么办法可以创建对象呢? 方法1: 使用类公有构造器. 方法2:使用类的静态方法返回一个实例. ②. 使用静态方法创建对象有什么优点? 优点1: 静态工厂方法的名字是由我们自己命名,而构造方法必须与

适用于Android开发的Effective Java

"Effective Java" 被许多人看做是编写高效且可维护的 Java 代码的重要指导书之一.Android 使用 Java 开发是否意味着里面的建议都要用上?不完全是. 有些人认为这本书给出的大多数建议不适用于 Android 开发.在我看来,情况并非如此. 我认为这本书的一些部分是不适用,不管是因为不是所有 Java 功能都已优化到能与 Android 一起使用(例如枚举.序列化等),还是因为是移动设备的限制例如 Dalvik/ART 表现不同于桌面版的 JVM). 但不管怎

Android 中的 Effective Java(速查表)

本文讲的是Android 中的 Effective Java(速查表), Effective Java 是一本被广泛认可的著作,它指明了在写 Java 代码时兼顾可维护性与效率的方式.Android 也是使用 Java 来开发的,这意味着前书中的所有建议仍旧可用,真的是这样吗?并不尽然.某些同学 认为书中的"大部分"建议都不适用于 Android 开发,但我认为并不是这样.我承认书中的部分建议确实不适用,因为并非所有 Java 特性都有针对 Android 优化(比如说枚举,序列化等等