<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
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!"); } }}