核心思想
{P}S{Q}表示程序的正確性斷言.
S表示程序代碼段,P(前置斷言)和Q(後置斷言)分別是S執行前後應該滿足的斷言。
P(前置斷言)刻畫了程序執行前應該滿足的條件;
Q(後置斷言)刻畫了程序執行後應該滿足的條件。
斷言{P}S{Q}的含義:
如果滿足P爲真則S必定在有限步驟內終止,且終止時Q必定爲真。
應用於計算機語言
Assertion(斷言)功能在J2SE 1.4版本時引入的,是一種爲方便調試而引入的語法機制(也可以說就是一種調試機制)。assert從J2SE1.4開始被作爲關鍵字保留。
爲什麼需要斷言
這裏你可能會問:我們不是有調試方法嗎(在eclipse中設置斷點追蹤變量),爲什麼需要斷言來方便調試呢?
你想一下:你開發了一款產品(假設產品中代碼分爲 B C兩段),過了一段時間後客戶跟你講有bug需要你進行維護,你發現需要修改C段的代碼,但是你能確定修改了C段後不會影響B段的代碼運行結果嗎,按照我們以前的測試方式的話你就只有把B段也進行測試吧;好,就算要把B段按照以前的輸出語句或斷點和邏輯判斷來從新測試,可是這些信息沒有保存呀,隔了這麼久了你也可能忘了,這是不是一件相當麻煩的事。而assertion(斷言)就可以比較好的解決這個問題。
語法形式(兩種)
assert bool_expression1;
// bool_expression1爲邏輯表達式,結果只能爲true;若爲false,將拋出AssertionError異常。
assert bool_expression1: expression2;
// 若bool_expression1結果爲false拋出異常並且把expression的結果轉化爲String類型打印出來
運行
在運行時,我們可以選擇開啓assertion功能,或者不開啓,另外我們還可以開啓一部分類或包的assertion功能,所以運行選項變得有些複雜。
Java -ea Test.class // [-ea]參數:啓動斷言(執行時纔會去檢測斷言的真假)
Java -da Test.class // [-da]參數:關閉斷言(執行時忽略斷言語句)
參考:
歐陽晨和周欣寫的深入解析Java的新特性assertion
華志章老師的《Java語言程序設計》