一、概述
在C和C++語言中都有assert關鍵,表示斷言。
在Java中,同樣也有assert關鍵字,表示斷言,用法和含義都差不多。
二、語法
在Java中,assert關鍵字是從JAVA SE 1.4 引入的,為了避免和老版本的Java代碼中使用了assert關鍵字導致錯誤,Java在執行的時候默認是不啟動斷言檢查的(這個時候,所有的斷言語句都 將忽略!),如果要開啟斷言檢查,則需要用開關-enableassertions或-ea來開啟。
assert關鍵字語法很簡單,有兩種用法:
1、assert <boolean表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出AssertionError,并終止執行。
2、assert <boolean表達式> : <錯誤信息表達式>
如果<boolean表達式>為true,則程序繼續執行。
如果為false,則程序拋出java.lang.AssertionError,并輸入<錯誤信息表達式>。
三、應用實例
下面給出一個例子,通過例子說明其用法:
assert適用那些你知道具體是什么錯誤,你和你的調用者已經約定應該由你的調用者去排除或檢查的錯誤。你通過一個斷言告訴你的調用者。assert不適用那些外部系統造成的錯誤,比如用戶輸入數據的錯誤,某個外部文件格式錯誤。這些錯誤不是你的調用者而是用戶造成的,甚至于不屬于異常,因為出現輸入錯誤和文件格式錯誤是經常的,這些錯誤應該由業務代碼去檢查。
assert比較適合于被頻繁調用的 基類,框架代碼,工具類,核心代碼,接口代碼中,這正是它在運行時被去掉的原因。測試代碼應該在測試階段開啟-ea參數,便于對系統深處的核心代碼做仔細的測試。
Java較少使用assert的原因是Java有很完整的OO體系,強制類型轉換出現得較少,所以不需要類似c那樣需要頻繁的檢查指針的類型是否正確,指針是否為空。同時Java也很少直接管理內存或緩沖區,所以不需要頻繁的檢查傳入的緩沖區是否為空或者是已經越界。
但使用好assert有助于提高框架代碼的正確性和減少框架代碼的使用者的調試時間。
===============================================================
comment:
assert要達到的目的是讓程序員方便的發現自己的邏輯錯誤,并且不影響程序的效率。assert所發現的錯誤,是完全不應該出現的,是不能用異常代替的。異常,那是系統所允許的,或者是系統不可控的“錯誤”,它不是程序員的邏輯問題。
assert應該是開發階段打開,而在發布后關閉。
新聞熱點
疑難解答