1. 斷言(Assert [ə'sɝt] vt. 維護,堅持;斷言;主張;聲稱)
作用:其實就是用來調試程序的,不過目測使用的很少。
先來看兩個例子,然后再來解釋:
1.1. 先定義一個 TestAssert類

1 public class TestAssert{ 2 public static void main(String[] args){ 3 TestAssert ta = new TestAssert(); 4 ta.Test(-99); 5 } 6 7 public void Test(int age){ 8 //assert關鍵字,再加一個布爾表達式,但表達式結果為false時,程序就會退出 9 //並拋出一個AssertionError,所以斷言是error級別的 10 assert age>=0;//滿足條件則繼續運行 11 System.out.println("繼續執行,輸入的年齡是:"+age); 12 } 13 }
首先編譯 javac TestAssert.java
然后正常執行: java TestAssert,結果是:
啟動斷言, java -ea TestAssert ,結果是:
或者使用 java -enableassertions TestAssert,結果是一樣的:
可以看到,拋出的類型是 java.lang.AssertionError
至於顯式關閉斷言的命令就不測試了,個人感覺那是脫褲子放屁的事,有興趣的可以自己測試一下。
1.2. 斷言 后面附帶信息的例子:
還是使用上面的類 TestAssert,稍作修改:

1 public class TestAssert{ 2 public static void main(String[] args){ 3 TestAssert ta = new TestAssert(); 4 ta.Test(-99); 5 } 6 7 public void Test(int age){ 8 //assert關鍵字,再加一個布爾表達式,但表達式結果為false時,程序就會退出 9 //並拋出一個AssertionError,所以斷言是error級別的 10 assert age>=0:"不能輸入這種不合理的年齡啊";//滿足條件則繼續運行 11 System.out.println("繼續執行,輸入的年齡是:"+age); 12 } 13 }
首先編譯 javac TestAssert.java
然后正常執行: java TestAssert,結果是:
因為默認沒開啟斷言,所以結果還是跟上面一樣,
啟動斷言, java -ea TestAssert ,結果是:
很明顯,結果中輸出了我們剛剛寫的字符串,這樣可以增強可讀性
或者使用 java -enableassertions TestAssert,結果是一樣的:
2. 使用方法,(需要使用命令行)
2.1. 開啟斷言功能(默認是關閉的)
java -ea TestAssert ----(ea就是enable和assertions的縮寫)
或者:java -enableassertions TestAssert
2.2. 關閉(雖然默認是關閉的,但你也可以顯示去關閉它,其實這個參數根本沒有,哈哈)
java -da TestAssert
或者:java -disableassertions TestAssert
3. 斷言的使用格式:
3.1. 普通格式 assert 布爾表達式;
eg: int a = 0;
assert a>100;
3.2. 增強格式 assert 布爾表達式:"字符串";