J2SE 1.4 引入 assert 關鍵字,屬於進階異常處理。斷言為布爾表達式,開發者相信在特定點為真。失敗拋出 AssertionError(Error 難恢復,表示程序狀態偏離正常)。兩種形式:
assert booleanExpression;
assert booleanExpression : message; // 訊息顯示於錯誤中
可用作方法前置/後置條件、switch default 分支不可達檢查等。限制:必須在可執行塊中,不可用於類變量聲明。
編譯需指定 -source 1.4:javac -source 1.4 AssertTest.java。預設禁用斷言,運行需顯式啟用:java -ea AssertTest (或 -enableassertions)。
範例:檢查命令列參數必須為 0。不啟用斷言時正常輸出參數數;啟用後拋出 AssertionError: 1 != 0。
-ea:package...:啟用包及子包(如 -ea:com.example...)-ea:ClassName:啟用特定類-da/-disableassertions:禁用(可組合,如啟用包但禁用某類)-esa/-enablesystemassertions:啟用系統類斷言ClassLoader 四方法控制後續載入類的斷言狀態:
setDefaultAssertionStatus(boolean):預設狀態setPackageAssertionStatus(String, boolean):包及子包setClassAssertionStatus(String, boolean):特定類clearAssertionStatus():重置所有獲取 ClassLoader:getClass().getClassLoader() (非靜態) 或 MyClass.class.getClassLoader() (靜態)。僅影響設置後載入的類,實際多用命令列控制。
斷言可選擇性啟用,部署時關閉零開銷。官方文檔 Usage Notes 提供使用建議。關鍵記住:斷言不應改變程序狀態(無副作用),僅作檢查。