斷言是用來維護程式讓它可以更堅固,通常會用來檢查一些關鍵的值,避免這些值出現錯誤讓程式無法繼續執行。
它的語法有兩種:
如果<boolean_expression>為true,程式就會繼續執行,但當boolean_expression為false時,就會丟出AssertionError,程式會中斷。
assert <boolean_expression>
當boolean_expression為false時,就執行:後的運算式,最常用的是字串,來說明發生錯誤的原因。
assert <boolean_expression>: <detail_expression>
// 範例
assert obj != null : "物件不能為null"
其實乍看之下跟if有點像,都是true就執行一種,false執行另外的程式,但兩者的作用有著本質的區別:assert關鍵字是為了測試,用來除錯程式時用的,如果用assert來控制程式流程,在測試除錯結束後去掉assert關鍵字就意味著修改了程式的正常流程,所以還是要適當使用這個Assertion機制,它應該在程式開發的過程中就已經完成,不管使用者有沒有啟動這個功能,都不可以影響到程式的正常執行,必須遵守兩個限制:
會使用到Assertion的四種情況:
最後再提醒一次,斷言是用來判定程式中的某個執行點必然是或不是某個狀態,千萬不能把它當作if判斷式來使用,assert不應該被當做程式執行流程的一部份。