- 一些不希望被实例化的工具类,在缺少显示构造器的情况下,编译器会自动提供一个公有的,无参的缺省构造器(default constructor)。
- 试图将类做成抽象类来防止被实例化也是行不通的,该类可以被子类化,并且该子类也可以被实例化。这样做还会误导用户,以为这种类是专门为继承而设计的。
- 使用显示的私有构造器来防止类被实例化。AssertionError可以避免在类的内部调用构造器,它保证该类任何情况下都不会实例化:
public class NonInstantiabilityClass {
//禁止默认构造器来实现不可实例化类
private NonInstantiabilityClass() {
throw new AssertionError();
}
}