斷言
當程序中使用大量的異常拋出來檢查變量的值是否符合規定時,檢測所使用的代碼會保留在程序中,積累這些測試代碼會導致程序越來越慢。
斷言機制可以在測試期間向代碼中插入檢查語句,當代碼發布時,這些語句能夠自動被移走。
斷言的語法形式如下:
// 當條件不成立時拋出AssertionError異常
assert condition;
// 當條件不成立時將表達式傳入AssertionError構造器,轉換成消息字符串,然后拋出異常
assert condition : expression;
啟用和禁用斷言
啟用或禁用斷言時類加載器的功能,不需要重新編譯程序,在運行程序時設置選項即可。
java -enableassertions MyApp
當斷言被禁用時,類加載器會跳過斷言代碼,為程序運行節省時間。
也可以在類甚至包中使用斷言。
java -ea:MyClass -ea:com.mycompany.mylib... MyApp
也可以選擇禁用某個特定類和包的斷言。
java -ea:... -da:MyClass MyApp
對於沒有類加載器的系統類,使用-enablesystemassertions
或-esa
開關啟用斷言。
參數檢查
對於文檔中不拋出異常的參數約定,應當使用斷言來判斷其符合條件,這種約定稱為前置條件。
文檔假設
如果使用注釋來說明假設的前置條件,應當用斷言來代替。這樣當違反假設時可以直接拋出異常。