關閉→
當前位置:知科普>IT科技>java - assert

java - assert

知科普 人氣:1.51W

<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 java

另外,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!");        }    }}

TAG標籤:#java #assert #