天天看點

04-通過私有構造器強化不可執行個體化的能力

有時候需要編寫隻包含靜态方法和靜态域的類,其一般作為工具類使用,這樣的類不需要被執行個體化。然而在缺少顯式構造器的情況下,編譯器會自動提供一個公有的、無參的預設構造器(dafault constructor),是以常常可以看到一些被無意識地執行個體化的類。

這就需要強化此類不可執行個體化的能力,由于隻有當類不包含顯式的構造器時,編譯器才會生成預設的構造器,是以我們隻需要将這個類包含私有構造器,它就不能被執行個體化了,如下所示會 Exception in thread “main” java.lang.AssertionError 。

public class Student {

    private Student() {
        throw new AssertionError();
    }

    public static void main(String[] args) {
        new Student();
    }
}
           

由于顯式的構造器是私有的,是以不能在類的外部通路它;其中AssertionError()不是必須的,但是他可以避免不小心在 Student 類的内部調用構造器,進而保證了 Student 類在任何情況下都不會被執行個體化。

但是這種問題造成了一個問題,它使這Student 類不能被子類化,因為如果有子類,子類所有的構造器都必須顯式或隐式地調用父類的構造器,但是并沒有可通路的父類構造器。

繼續閱讀