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