第04条 通过私有构造方法强化不可实例化的能力

171 阅读1分钟

为什么需要通过私有构造方法强化不可实例化的能力

1、有些类是不需要实例化,如一些工具类:java.lang.Math和java.util.Arrays等。
2、当我们没有在类中定义一个显式的构造方法时,编译器会自动提供一个公共的、无参的缺省构造方法。
3、但是有的工具类对用户来说,不管什么样的构造方法都是一样的,不需要就是不需要,因此我们要让用户不可以去创建这个类的对象。

私有构造的缺点

  • 缺点1:该类不能被子类继承。
  • 缺点2:这么写法让调用者费解,需要添加注释。
// 防止被实例化
public class Person{
    /**
     * 添加注释:
     * Suppress default constructor for noninstantiability
     */
    private Person(){
        // 断言错异常,因为不能被访问,所以此段代码非必须,但是可以防止类的内部实例化
        // 告诉用户不可以实例化此类
        throw new AssertionError();
    }
}