assert java是什么,讓我們一起了解一下?
assert java是一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真,可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言,而在部署時(shí)禁用斷言。
那么,assert(斷言)有哪些特性?
前置條件斷言:代碼執(zhí)行之前必須具備的特性
后置條件斷言:代碼執(zhí)行之后必須具備的特性
前后不變斷言:代碼執(zhí)行前后不能變化的特性
通過assert(斷言)的特性,可以劃分以下兩種形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1應(yīng)該總是一個(gè)布爾值,Expression2是斷言失敗時(shí)輸出的失敗消息的字符串。如果Expression1為假,則拋出一個(gè) AssertionError,這是一個(gè)錯(cuò)誤,而不是一個(gè)異常,也就是說是一個(gè)不可控制異常(unchecked Exception),AssertionError由于是錯(cuò)誤,所以可以不捕獲,但不推薦這樣做,因?yàn)槟菢訒?huì)使你的系統(tǒng)進(jìn)入不穩(wěn)定狀態(tài)。
另外,assert(斷言)在默認(rèn)情況下是關(guān)閉的,要在編譯時(shí)啟用斷言,需要使用source1.4標(biāo)記 即javac source1.4 Test.java ,在運(yùn)行時(shí)啟用斷言需要使用 -ea參數(shù) 。要在系統(tǒng)類中啟用和禁用斷言可以使用 -ea和 -dsa參數(shù)。
例如:
public?class?AssertExampleOne{ ????public?AssertExampleOne(){} ????public?static?void?main(String?args[]){ ????????int?x=10; ????????System.out.println("Testing?Assertion?that?x==100"); ????????assert?x==100:"Out?assertion?failed!"; ????????System.out.println("Test?passed!"); ????} }
如果編譯時(shí)未加 -source1.4,則編譯通不過
在執(zhí)行時(shí)未加 -ea 時(shí)輸出為
Testing Assertion that x==100
Test passed!
jre忽略了斷言的舊代碼,而使用了該參數(shù)就會(huì)輸出為
Testing Assertion that x==100
Exception in thread "main" java.lang.AssertionError: Out assertion failed!
at AssertExampleOne.main(AssertExampleOne.java:6)
值得注意的是,由于程序員的問題,斷言的使用也可能會(huì)帶來副作用。
例如:
boolean?isEnable=false; assert?isEnable=true; 這個(gè)斷言的副作用是因?yàn)樗薷牧顺绦蛑凶兞康闹挡⑶椅磼伋鲥e(cuò)誤,這樣的錯(cuò)誤如果不細(xì)心的檢查是很難發(fā)現(xiàn)的。但是同時(shí)我們可以根據(jù)以上的副作用得到一個(gè)有用的特性,根據(jù)它來測(cè)試斷言是否打開。 public?class?AssertExampleTwo{ ????public?static?void?main(String?args[]){ ????????boolean?isEnable=false; ????????assert?isEnable=true; ????????if(isEnable==false){ ????????????throw?newRuntimeException("Assertion?should?be?enable!"); ????????} ????} }
以上就是小編今天的分享了,希望可以幫助到大家。