J2SE 1.4在Java中引入了assertion(斷言)功能。最簡單的情形下,在Java代碼中任意一行可以寫入一條布爾表達式,在這一行代碼的最前面加上assert關鍵字,就可以實現這樣的功能:假如表達式為真,則代碼繼續執行;否則,拋出AssertionError異常。為了實現這項功能,在Java中新增加了assert關鍵字、AssertionError類,java.lang.ClassLoader中增加了幾個新的方法。
斷言語句有以下兩種合法形式:
assert expression1;
assert expression1 : expression2;
expression1是一條被判定的布爾表達式,必須保證在程序執行過程中它的值一定是真;expression2是可選的,用於在expression1為假時,傳遞給拋出的異常AssertionError的構造器。
默認情況下斷言功能是關閉的。通過命令行參數控制:
# 啟用所有斷言
java -ea MyClass
java -enableassertions MyClass
# 禁用斷言
java -da MyClass
java -disableassertions MyClass
# 針對特定包/類
java -ea:com.myapp... MyClass
java -da:com.myapp... MyClass
| 應該使用的情形 | 不應該使用的情形 |
|---|---|
| 保證內部數據結構正確 | 不保證命令行參數正確 |
| 保證私有方法參數正確 | 不保證公共方法參數正確 |
| 檢查方法結束時狀態 | 不檢查外界對公共方法使用 |
| 檢查決不應該出現的狀態 | 不保證用戶輸入正確性 |