斷言Assert:Core Java 7.2

斷言 Assert

assert,是斷定、堅稱的意思。assertion,是主張、肯定的意思。

對於斷言代碼assert i>0;如果i的值實際是小於或者等於0,那麼系統就會拋出一個AssertionError異常。
注意,AssertionError異常是Error的子類,性質相當於JVM自身內部異常。

什麼時候應該選擇使用斷言呢

  • 如果在條件不成立的情況下繼續執行的話,會發生致命的、不可恢復的錯誤時;即只有條件成立時,纔有繼續運行的意義。就可以用 assert 條件表達式;
    比如,如果我們開發的一個系統,要求計算機的內存(memSize)至少是2G,如果小於2G,可能運行一會兒,系統就會崩潰。這時,就可以直接用斷言,assert memSize>2G;要求 條件表達式 memSize>2G必須成立,如果不成立、程序就沒必要再繼續啓動。
  • 斷言檢查只用於開發和測試階段

啓用禁用斷言

在默認情況下, 斷言被禁用。

可以在運行程序時用 -enableassertions 或 -ea 選項啓用:
java -enableassertions MyApp

需要注意的是, 在啓用或禁用斷言時不必重新編譯程序。啓用或禁用斷言是類加載器( class loader) 的功能。當斷言被禁用時, 類加載器將跳過斷言代碼, 因此,不會降低程序運行的速度。

有些類不是由類加載器加載, 而是直接由虛擬機加載。可以使用以下這些開關有選擇地啓用或禁用那些類中的斷言。

在某個類或整個包中使用斷言, 例如:
java -ea:MyClass -eaiconi.inycompany.inylib.. , MyApp

這條命令將開啓 MyClass 類以及在 com.mycompany.mylib 包和它的子包中的所有類的斷言。選項 -ea 將開啓默認包中的所有類的斷言。

用選項 -disableassertions 或 -da 禁用某個特定類和包的斷言:
java -ea:... -da:MyClass MyApp

啓用和禁用所有斷言的 -ea 和 -da 開關不能應用到那些沒有類加載器的“ 系統類”上。對於這些系統類來說, 需要使用
-enablesystemassertions/-esa 開關啓用斷言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章