assert java是什么,讓我們一起了解一下?
assert java是一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言,而在部署時禁用斷言。
那么,assert(斷言)有哪些特性?
前置條件斷言:代碼執行之前必須具備的特性
后置條件斷言:代碼執行之后必須具備的特性
前后不變斷言:代碼執行前后不能變化的特性
通過assert(斷言)的特性,可以劃分以下兩種形式
1.assert Expression1
2.assert Expression1:Expression2
其中Expression1應該總是一個布爾值,Expression2是斷言失敗時輸出的失敗消息的字符串。如果Expression1為假,則拋出一個 AssertionError,這是一個錯誤,而不是一個異常,也就是說是一個不可控制異常(unchecked Exception),AssertionError由于是錯誤,所以可以不捕獲,但不推薦這樣做,因為那樣會使你的系統進入不穩定狀態。
另外,assert(斷言)在默認情況下是關閉的,要在編譯時啟用斷言,需要使用source1.4標記 即javac source1.4 Test.java ,在運行時啟用斷言需要使用 -ea參數 。要在系統類中啟用和禁用斷言可以使用 -ea和 -dsa參數。
例如:
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!"); ????} }
如果編譯時未加 -source1.4,則編譯通不過
在執行時未加 -ea 時輸出為
Testing Assertion that x==100
Test passed!
jre忽略了斷言的舊代碼,而使用了該參數就會輸出為
Testing Assertion that x==100
Exception in thread "main" java.lang.AssertionError: Out assertion failed!
at AssertExampleOne.main(AssertExampleOne.java:6)
值得注意的是,由于程序員的問題,斷言的使用也可能會帶來副作用。
例如:
boolean?isEnable=false; assert?isEnable=true; 這個斷言的副作用是因為它修改了程序中變量的值并且未拋出錯誤,這樣的錯誤如果不細心的檢查是很難發現的。但是同時我們可以根據以上的副作用得到一個有用的特性,根據它來測試斷言是否打開。 public?class?AssertExampleTwo{ ????public?static?void?main(String?args[]){ ????????boolean?isEnable=false; ????????assert?isEnable=true; ????????if(isEnable==false){ ????????????throw?newRuntimeException("Assertion?should?be?enable!"); ????????} ????} }
以上就是小編今天的分享了,希望可以幫助到大家。