`

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

阅读更多

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

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

工具类(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私有构造器使用方法示例

    "Java私有构造器使用方法示例" Java 私有构造器是 Java 编程语言中的一种特殊的构造器,它使用 private 关键字声明...通过私有构造器,可以实现 Singleton 属性,强化不可实例化的能力,提高代码的可维护性和安全性。

    反射和动态实例化

    4. 构造器(Constructors):`Constructor`类用于创建对象,可以指定构造函数并传入参数。 动态实例化是指在运行时根据字符串或其他方式确定的类名来创建对象。通常,我们使用`Class`对象的`newInstance()`方法或`...

    spring介绍(set和构造器注入)

    - **构造器注入**更适用于那些必不可少的依赖,因为它强制在实例化时提供所有的必需依赖,增强了对象的内聚性。 4. **选择注入方式**: - 如果一个bean的所有依赖都是必须的,那么构造器注入更为合适,因为它可以...

    Effective-Java读书笔记(上)

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

    《Effective Java》读书分享.pptx

    通过私有构造器强化不可实例化的能力,可以防止工具类被实例化。 Builder 模式 Builder 模式是一种构建对象的方法,不直接生成想要的对象,而是利用必要参数调用构造器(或者静态工厂)得到一个 builder 对象,...

    UI_TableView.zip_DEMO_便利构造器

    在iOS开发中,UITableView是一种非常常见且重要的控件,它用于展示列表或表格...它展示了如何通过便利构造器简化UITableView的创建,以及如何利用单例模式在不同控制器间共享数据,这些都是iOS开发中不可或缺的技能。

    通过反射获取类的实例

    这里,`getDeclaredConstructor()`返回一个表示私有构造器的`Constructor`对象,`setAccessible(true)`使其可访问,然后`newInstance()`创建实例。 `ClassLoader`在Java中扮演着加载类的关键角色。它负责将类的字节...

    Microsoft.NET框架程序设计 手打版9

    如果希望阻止外部代码创建该类的实例,则可以通过将构造器的访问权限设置为私有(`private`)来实现。 当创建一个新的引用类型实例时,CLR将依次执行以下三个步骤: 1. **分配内存**:为新实例分配必要的内存空间...

    effective-java.pdf

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

    Java反射机制,通过对象访问调用类的私有成员或方法

    通常,私有成员是不可直接访问的,但反射允许我们绕过这种限制。要调用私有方法,我们需要使用`Method`类,先获取到该方法的`Method`对象,然后通过`setAccessible(true)`将其访问权限设为可访问,最后通过`invoke()...

    java中面向对象的小练习

    - 当子类继承父类时,子类可以使用父类的非私有构造器。`Sub`类覆盖了`Base`类的构造函数,并在`main`方法中创建了一个`Sub`对象。输出结果"Base Sub"表示先调用了父类的构造器,然后是子类的构造器,这符合Java中...

    JavaScript中利用构造器函数模拟类的方法

    在JavaScript中,构造器函数是一种特殊类型的函数,用于创建和初始化对象。它们是模拟面向对象编程中的类的关键机制,因为在JavaScript这种基于原型的语言中,并没有真正的类。构造器函数允许开发者定义可重用的模板...

    Effective Java第三版1

    4. **强化不可实例化的能力**:对于工具类或只包含静态方法的类,通过使构造器私有,可以防止其被实例化。 5. **依赖注入**:优于硬编码资源连接,依赖注入可以提高代码的可测试性和灵活性。 6. **避免创建不必要的...

    Node.js-private-class保护类私有属性的一个模块

    因此,尽管从类的外部看起来这些成员似乎存在(因为它们有下划线前缀),但实际上它们是不可触及的。 这个模块适用于需要严格控制数据访问权限的场景,比如在实现数据模型、缓存系统或者任何需要内部状态保持不变性...

    java代码-日常练习38,继承构造器###

    需要注意的是,构造器不能被重写(override),因为它们不具有方法签名。子类可以定义新的构造器,但不会覆盖父类的构造器。每个类都有自己的构造器集合,子类的构造器与父类的构造器独立存在。 **5. 初始化块和...

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

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

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init__`方法)会被调用。在涉及继承的情况下,这个过程遵循一定的规则。 1. **初始化父类**: - 在子类创建实例时,首先会执行父类的构造函数...

    机器学习资源整理002不全

    1. **项1:考虑使用静态工厂方法而非构造器**:静态工厂方法可以提供更灵活的实例化方式,且不破坏类的不可实例化性。 2. **项2:隐藏实现类**:通常,内部类应该保持为私有,除非有明确的使用它们的外部需求,这样...

    Java Object实例代码

    当我们创建一个类并实例化它时,我们就是在创建该类的对象。`Object`类提供了处理对象的基本方法,如`toString()`(返回对象的字符串表示),`hashCode()`(返回对象的哈希值)和`equals()`(比较两个对象是否相等)...

Global site tag (gtag.js) - Google Analytics