assert 是斷言, 用的最多的就是測試了,譬如單元測試。
斷言看作是異常處理的一種高級形式。
spring源碼裏用的比較多,比如利用cookie自動登錄時,cookie保存了用戶名,和密碼,
這個cookie就只有兩個元素,我斷言一下,如果取到的對應的cookie裏的對象的元素不是兩個,
那麼直接拋異常,或者不往下處理了。
assert關鍵字語法很簡單,有兩種用法:
1、assert
如果爲true,則程序繼續執行。
如果爲false,則程序拋出AssertionError,並終止執行。
2、assert : <錯誤信息表達式>
如果爲true,則程序繼續執行。
如果爲false,則程序拋出java.lang.AssertionError,並輸入<錯誤信息表達式>。
//斷言1結果爲true,則繼續往下執行
asserttrue;
System.out.println("斷言1沒有問題,Go!");
System.out.println("\n-----------------\n");
//斷言2結果爲false,程序終止
assertfalse:"斷言失敗,此表達式的信息將會在拋出異常的時候輸出!";
System.out.println("斷言2沒有問題,Go!");
從JDK1.4版本開始,Java語言引入了斷言(assert)機制。目的:程序調試
測試代碼或者調試程序時,總會做出一些假設,斷言就是用於在代碼中捕捉這些假設
表現形式:斷言就是程序中的一條語句,它對一個boolean表達式進行檢查
一個正確程序必須保證這個boolean表達式的值爲true;如果該值爲false,說明程序已經處於不正確的狀態,系統給出警告或退出
如果沒有斷言機制,Java程序通常使用if-else或switch語句進行變量狀態檢查。
缺點:
由於檢查的數據類型不完全相同,這樣的語句形式不會統一。
因爲檢查僅僅是應用在測試階段,而if-else或switch語句在發佈以後仍然將起作用,如果消除這些代碼就意味着要註釋或者刪除這些代碼,如果這些代碼量很大就意味着工作很繁重並存在風險。
斷言的優點:
Java程序員用統一的方式處理狀態檢查問題;
斷言只需在發行的時候關閉該功能即可。
斷言的開啓和關閉
在默認情況下斷言是關閉的,因此在使用斷言以前,需要先開啓斷言功能,方法:
java –ea MyClass 或者
java –enableassertions MyClass
關閉斷言功能的方法:
java –da MyClass 或者
java –disableassertions MyClass
注意:斷言檢查通常在開發和測試時開啓。爲了提高性能,在軟件發佈後,斷言檢查通常是關閉的
斷言的使用
Java中使用關鍵字assert標記斷言,語法格式爲:
assert Expression1
執行到assert語句時,如果Expression1的值爲true,則程序正常執行,如果值爲false,該語句創建一個Assertion Error對象,並拋出該對象。
assert Expression1:Expression2
斷言失敗時,系統會自動將Expression2的值傳遞給新建的AssertionError對象,進而將其轉換爲一個消息字符串保存起來,可以獲得更多、更有針對性的檢查失敗細節信息。
什麼時候使用斷言
通常來說,斷言用於檢查一些關鍵的值,並且這些值對整個程序,或者局部功能的完成有很大的影響。
斷言表達式應該短小、易懂,如果需要評估複雜的表達式,應該使用函數計算。
使用斷言的情況
檢查控制流:在if-else和switch語句中,可以在不應該發生的控制支流上加上assert語句。如果這種情況發生了,assert能夠檢查出來。
在私有方法計算前,檢查輸入參數是否有效
對於一些private的方法,要求輸入滿足一些特定的條件,可以在方法開頭使用assert進行參數檢查;對於公共方法,通常不使用斷言檢查