一、背景
对于有些工具类如java.lang.Math、java.util.Arrays等,它们只包含静态方法和静态域字段,对于这样的类实例化没有什么任何意义。但在实际使用中,如果不加任何特殊处理,这样的类还是可以像其他类一样可以被实例化。
二、处理办法
将构造函数设置为private,这样外部类无法实例化该类,同时在这个私有的构造函数中直接抛出异常,从而避免在类的内部实例化。
public class UtilityClass {
// 私有的构造器,内部实例化会抛出异常
private UtilityClass() {
throw new AssertionError();
}
}
三、好处和弊端
这样定义之后,类在内部和外部都不能被实例化了,否则会发生编译错误或抛出异常,但副作用是这个类将不能被子类化了。
分享到:
相关推荐
只有当类不包含显式构造器时,才会生成一个默认构造器,因此可以通过包含一个私有构造器来实现类的非实例化:public class UtilityClass {..
- 不可实例化:当类设计为工具类,不希望有实例存在时,可以使用私有构造器来防止外部实例化。 - 不可变值类:使用预先构建的实例或构造时缓存实例,确保不会创建重复对象。 4. 基于接口的框架:通过接口提供静态...
通过私有构造器强化不可实例化的能力,可以防止工具类被实例化。 Builder 模式 Builder 模式是一种构建对象的方法,不直接生成想要的对象,而是利用必要参数调用构造器(或者静态工厂)得到一个 builder 对象,...
4. **强化不可实例化的能力**:对于工具类或只包含静态方法的类,通过使构造器私有,可以防止其被实例化。 5. **依赖注入**:优于硬编码资源连接,依赖注入可以提高代码的可测试性和灵活性。 6. **避免创建不必要的...
**通过私有构造器强化不可实例化的类**: - **工具类**:通常,工具类应包含私有构造器以防止被实例化。 - **副作用**:使用私有构造器的一个副作用是使得该类不能被继承。 **避免创建不必要的对象**: 1. **不可...
- Item4:如果一个类不应当被实例化,使用私有构造子并配合`final`关键字使其成为不可初始化的常量类。 2. **避免产生不必要的对象** - Item5:尽量重用对象,特别是对于不可变对象,如字符串,它们在常量池中会...
7. **使用私有构造器或枚举来禁止实例化**:对于工具类(只包含静态方法的类),应阻止外界实例化,可以使用私有构造器或枚举实现这一目标。 8. **利用接口隐藏实现细节**:通过定义接口并让实现类实现该接口,可以...
6. **构造器**:Item 1 "提供私有的构造器来创建不可实例化的类" 和 Item 2 "如果可能,应该使类及其字段不可变" 都涉及到类的设计和初始化策略。 7. **泛型**:Item 25 "尽可能地使用类型参数" 介绍了泛型在代码...
2. **构造器与工厂方法**:提倡使用私有构造器和静态工厂方法,以便于控制类的实例化过程,提高代码灵活性,例如实现不可变对象、延迟初始化等。 3. **接口与抽象类**:讨论了接口和抽象类在设计上的差异,强调接口...
2. **构造器**:推荐使用私有构造器或静态工厂方法来限制类的实例化,以实现不可变类或者控制对象的创建。此外,还强调了构造器不应抛出检查异常。 3. **枚举**:枚举在Java中不仅仅是常量集合,还可以包含方法,...
还有许多其他的知识点,如“利用equals()和hashCode()的一致性”、“重写clone()需谨慎”、“优先使用私有构造器或枚举来替代单例”等,都可以在源代码中找到实际应用的例子。 总之,《有效Java》第三版的源代码为...
3. **构造器(Constructors)**:提倡使用私有构造器和工厂方法,以实现不可实例化类或者控制实例化过程。此外,还讨论了如何利用构造器初始化器来优化对象初始化。 4. **静态工厂方法(Static Factory Methods)**...
14. **使用私有构造器或final类来阻止实例化**:对于工具类或者单例模式,这样做可以防止外部非法实例化。 15. **避免非最终字段的同步**:非最终字段在多线程环境中可能导致数据不一致,应优先考虑使用原子变量或...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch撰写,第二版更是程序员们不可或缺的参考书籍。这本书深入探讨了如何编写出高质量、高效、可维护的Java代码,涵盖了众多最佳实践和设计模式。这里我们将...
11. **项11:用私有构造器或枚举类型强化单例属性** 单例模式应防止多线程环境下的并发创建,私有构造器和枚举类型是实现单例的推荐方式。 12. **项12:谨慎地覆盖equals()和hashCode()** 当重写equals()时,也应...
##### Item3:通过私有构造器强制执行不可实例化 - **目的**:防止类被实例化,通常适用于工具类等不需要实例化的场景。 - **实现方式**: - 将构造器声明为私有,从而阻止外部直接创建实例。 ##### Item4:避免...
13. **使用私有构造器或枚举来防止被实例化**:对于工具类,可以防止误用和确保其不可实例化。 14. **使用Diamond操作符简化泛型实例化**:Java 7引入了Diamond操作符,可以自动推断出类型参数,使代码更简洁。 15...