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

我们在开发中经常会去做一些工具类,这些类中的方法和变量都是static的。而这样的工具类是不希望呗实例化的。然后我们知道jdk会在无构造器的时候,自动的提供一个无参数的缺省构造器。该构造器就会提供给用户一个创建改类对象的接口,因而我们在工具类中会将此构造函数显示化私有化:


public class UtilityClass{
private UtilityClass(){
// 用来避免在类内不小心的调用该构造器
throw new AssertError();
}
......
}

该条建议,在第1条,建议使用静态工厂方法代替构造器中也被使用,来屏蔽外层对于构造器创建对象实例的接口。

第四条:通过私有构造器强化不可实例化的能力,码迷,mamicode.com

时间: 2024-10-19 22:24:32

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

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

当需要编写只包含静态方法和静态域的类时,像是java.lang.Math,java.util.Arrays,把基本类型的值或者数组类型上的相关方法组织起来,或者像java.util.Collections,把实现特定接口的对象上的静态方法组织起来. 这样的工具类不希望被实例化,实例对它没有意义. 企图通过将类做成抽象类来强制该类不可被实例化,行不通.因为该类可以被子类化,并且子类可以被实例化. 我们把类的构造器显式声明为私有的,保证在类的外部不能被访问. public class Utility

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

场景: 在创建工具类的时候,大部分是无需实例化的,实例化对它们没有意义.在这种情况下,创建的类,要确保它是不可以实例化的. 存在问题: 在创建不可实例化的类时,虽然没有定义构造器.但是,客户端在使用该类的时候,依然可以实例化它.客户端,可以继承该类,通过实例化其子类来实现实例化:客户端可以调用默认的构造器来实例化该类. 要避免这个问题,使用的方式是,定义一个私有的构造器: public class UtilityClass { // Suppress default constructor fo

《effective java》读书札记第三条用私有构造器或者枚举类型强化Singleton属性

Singleton指仅仅被实例化一次的类.一般用来搞那些创建非常耗资源或者要求系统中只能有一个实例的类.这个非常常用.记得以前实习面试的时候就有这个面试题.一般采用的方法是将构造器私有化,然后提供一个static变量,再提供一个static的public方法用来返回static实例: //Singleton with static factory public class Elvis { private static final Elvis INSTANCE = new Elvis(); pri

Java私有构造器

Java私有构造器:使用private关键字声明的构造函数.由于类的构造函数时私有的,所以此类不能被实例化,同时也不能被继承.<Effective Java>第三条:用私有构造器或者枚举强化Singleton属性.所谓Singleton属性是指仅仅被实例化一次的类.第四条:通过私有构造器强化不可实例化的能力.在Java中实现Singleton有两种方式: public class Elvis { public static final Elvis INSTANCE = new Elvis();

【代码优化】私有构造器使用及对象创建优化

1.使用私有构造器或者枚举类型强化singleton 1>单例模式---私有构造器,提供一个公有的成员是一个静态工厂方法: public class SingleTon{ private static final  SingleTon single=new SingleTon(): private SingleTon(){ } public static SingleTon getInstance() { return single: } } 工厂方法的优势一在于它提供了灵活性:在不改变其他ap

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

第3条:用私有构造器或者枚举类型强化Singleton属性 Singleton指仅仅被实例化一次的类.Singleton通常会被用来本质上唯一的系统组件,比如窗口管理器或者文件系统.使类成为Singleton会使它的客户端测试变得十分困难,因为无法给Singleton替换模拟实现,除非它实现一个充当其类型的借口. 实现Singleton的两种方法,这两种方法都要把构造器保持为私有的,并导出公有的静态成员,以便允许客户端能够访问该类的唯一实例.在第一种方法中,公有静态成员是个final域: 1 /

第二章:创建和销毁对象。ITEM3:用私有构造器或者枚举类型强化Singleton属性。

声明一个Singleton类的3种方法: package com.twoslow.cha2; /** * 可以通过AccessibleObject.setAccessible(),通过反射机制调用私有构造器. * @author sai * */ public class Singleton01 { private Singleton01(){} public static final Singleton01 INSTANCE = new Singleton01() ; private Obje

第3项:用私有构造器或者枚举类型强化Singleton属性

??Singleton指仅仅被实例化一次的类 [Gamma95].Singleton通常代表无状态的对象,例如函数(第24项)或者本质上唯一的系统组件.使类称为Singleton会使它的客户端测试变得十分困难,因为除非它实现了作为其类型的接口,否则不可能将模拟实现替换为单例. ??实现单例的方法有两种. 两者都基于保持构造函数私有并导出公共静态成员以提供对唯一实例的访问. 在一种方法中,该成员是final字段: // Singleton with public final field publi

编写高质量代码改善C#程序的157个建议——建议105:使用私有构造函数强化单例

建议105:使用私有构造函数强化单例 单例指一个类型只生成一个实例对象.单例的一个简单实现如下所示: static void Main(string[] args) { Singleton.Instance.SampleMethod(); } public sealed class Singleton { static Singleton instance = null; public static Singleton Instance { get { return instance==null