`

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

    博客分类:
  • java
阅读更多
    在开发中我们有时候需要编写只包含静态方法和静态域的类,比如一些工具类。这些工具类不希望被实例化,因为实例对它们没有任何意义。但是,在没有显示构造器的情况下,编译器会自动提供一个共有的、无参的缺省构造器。

    那如何解决这个问题呢?由于只有类不包含显示的构造器时,编译器才会生存缺省的构造器,所以我们可以在类中提供一个私有的构造器:

public class Utils(){

    private Utils(){
      throw new AssertionError();
      //AssertionError不是必需的,但是它可以避免不小心在类的内部调用构造器;
     }

}


分享到:
评论

相关推荐

    Effective-Java读书笔记(上)

    **通过私有构造器强化不可实例化的类**: - **工具类**:通常,工具类应包含私有构造器以防止被实例化。 - **副作用**:使用私有构造器的一个副作用是使得该类不能被继承。 **避免创建不必要的对象**: 1. **不可...

    C#学习笔记整理_深入剖析构造函数、析构函数

    4.私有构造函数:则无法通过该构造函数实例化该对象,可通过调用静态函数来实例化;当仅用作某些静态成员或属性的容器时,可定义私有构造函数来防止被实例化; 一般的构造函数都是实例构造函数,只要创建实例,就...

    effective-java.pdf

    - 不可实例化:当类设计为工具类,不希望有实例存在时,可以使用私有构造器来防止外部实例化。 - 不可变值类:使用预先构建的实例或构造时缓存实例,确保不会创建重复对象。 4. 基于接口的框架:通过接口提供静态...

    Java中对象的生命周期 ..doc

    4. **私有构造函数**: - 私有构造函数只能在当前类内部使用。 - 通常用于单例模式或当类不希望被实例化时使用。 #### 四、对象的销毁 1. **对象生命周期的结束**: - 当没有任何引用指向该对象时,即对象成为...

    Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解

    ### Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解 #### 1. 定义类 在Python中,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它使得代码更加模块化、可重用,...

    Effective Java第三版1

    4. **不可实例化**:使用私有构造器可以强化一个类只能通过特定方式(如静态方法)访问的特性。 5. **依赖注入**:推荐使用依赖注入而非硬编码依赖,以提高代码灵活性和测试性。 6. **避免不必要的对象创建**:对象...

    java中构造方法和方法全面解析.pdf

    - **构造方法**:`super`用于调用超类的构造器,确保子类在实例化时能正确初始化父类的状态。同样,`super`调用必须位于构造方法的第一行。 - **普通方法**:`super`用于调用被重写的超类方法,确保在子类中能够执行...

    C++ 单一实例

    4. **反模式**:尽管Singleton在某些场景下很有用,但过度使用或不恰当使用可能会导致代码紧密耦合,降低可维护性和可扩展性。在考虑使用Singleton时,应仔细评估其必要性。 综上所述,C++中的单一实例模式是一种...

    JavaScript与OOP

    JavaScript是一种基于原型的面向对象编程语言,虽然它不支持像Java那样的纯面向对象机制,但可以通过其独特的语法特性实现模拟的面向对象编程。在JavaScript中,一切皆为对象,包括函数,这使得它在实现OOP(面向...

    第二季:C#面向对象基础(苏坤主讲).doc

    6. **类的引用**:非静态(`static`)的方法或属性需要通过实例化对象来访问,而静态成员则可以直接通过类名来访问。 7. **访问修饰符**:C#提供了四个主要的访问修饰符:`public`(公开)、`internal`(内部)、`...

    JAVA基础第章继承与多态练习题.docx

    - 私有类 `Base` 的实例化会在 `Pri` 类的实例化过程中进行,但由于 `Base` 中的 `i` 是局部变量,它的输出只会在 `Base` 构造器内部显示。而 `Pri` 类的静态变量 `i` 在类加载时初始化,所以输出只有 `200`,答案...

    VC++实例.pdf

    - **静态控件:** 用于显示不可编辑的文本或图标。 **6.5 文本编辑控件** - **编辑控件:** 允许用户输入文本。 **6.6 列表框控件** - **列表框:** 显示列表供用户选择。 **6.7 组合框** - **组合框:** 结合...

    类与对象-java实验报告

    在设计完成后,可以通过实例化这些类并调用相应的方法进行几何运算。例如,可以创建多个点对象并比较它们的距离,创建多条直线并判断它们的平行性,或者计算不同形状的面积和周长。 五. 面向对象设计原则 在设计...

    c++面试300题(华为,易思博,中软)

    16. 抽象类:不用于实例化,仅作为其他类继承的基础。 17. 运算符重载:使用户自定义类型能支持标准运算符,提供统一的操作界面。 18. 不能重载的运算符:`. *`, `::`, `sizeof`, `?:`, `.`。 19. 重载方式:普通...

    C# 反射 实例

    在C#编程中,反射是一种强大的工具,它允许我们在运行时检查、实例化和操作程序集、类型、方法、属性等对象。这个“C# 反射 实例”压缩包很可能是包含了一些示例代码,帮助开发者理解如何在实践中使用反射。让我们...

    c++bangzhu手册

    全局对象在任何代码执行之前构造,静态局部对象在第一次到达定义处构造,自动对象在其作用域开始时构造,析构顺序与构造相反。 理解并熟练运用这些知识点是掌握C++编程的关键。通过深入学习和实践,开发者可以编写...

Global site tag (gtag.js) - Google Analytics