像有些類裏面可能只包含靜態方法、屬性和靜態域的類時,而在缺乏顯示的構造器的時候,編譯器會提供一個無參的缺省構造器,因爲實例化它們並無任何意義,因此顯然沒有必要,這時候咱們能夠提供一個私有的構造器,這樣就不被實例化了,固然,咱們最後在構造器中拋出異常來進行說明下,或者加條註釋。spa
public class UtilityClass{ private UtilityClass(){ throw new AssertionError("UtilityClass cant not have instance"); } }
固然,有人企圖經過將類作成抽象類來強制該類不能不實例化,可是咱們不要忽略該類能夠被子類化,而後子類在進行實例化,這就很容易誤導用戶了。所以這種方法的缺點也就是不能被繼承。code