EffectiveJava 1创建和销毁对象 4通过私有构造器强化不可实例化的能力


1    重点掌握

1.1  本节摘要

编写只包含静态方法和静态域的类,需要通过私有构造器强化不可实例化的能力

1.2  使用私有构造器的弊端

使得一个类不能被子类化。所有构造器必须显示或隐式调用超类构造器。子类没有可访问的超类构造器访问。参考3.2

1.3  本节demo 3.1

2    课程内容

2.1  使只有静态方法的类不可实例化的其他方法及不可行原因

方法

将该类做成抽象类

不可行原因

  • 该类可以被子类化,子类同样能够实例化
  • 让用户误解专门是为了继承而设计的该类

3    代码演练

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

package com.ddwei.test.core.chapter4;

/**
 * 该类只有静态方法或静态域
 */
public class StaticUtilClass {

    private StaticUtilClass(){
        //防止在本类内部不小心实例化,以确保任何时候都不会被实例化
        throw new AssertionError();
    }

    public static void method1(){
        
    }


}

3.2  私有构造器弊端Demo

父类:

package com.ddwei.test.core.chapter4;

public class StaticParentUtilClass {
}

子类:

package com.ddwei.test.core.chapter4;

/**
 * 该类只有静态方法或静态域
 */
public class StaticUtilClass extends StaticParentUtilClass{

    private StaticUtilClass(){
        //防止在本类内部不小心实例化,以确保任何时候都不会被实例化
        throw new AssertionError();
    }

    public static void method1(){

    }


}

Test类