一、java斷言機制
- java斷言assert是jdk1.4引入的。
- jvm斷言默認是關閉的。
- 斷言可以局部開啓的,如:父類禁止斷言,而子類開啓斷言,所以一般說“斷言不具有繼承性”。
- 斷言主要使用在代碼開發和測試時期,用於對某些關鍵數據的判斷,如果這個關鍵數據不是你程序所預期的數據,程序就提出警告或退出。
- 斷言一般用於程序執行結構的判斷,千萬不要讓斷言處理業務流程。
二、判斷idea是否開啓了斷言
public static void main(String args[]) {
boolean isOpen = false;
// 如果開啓了斷言,會將isOpen的值改爲true
assert isOpen = true;
// 打印是否開啓了斷言,如果爲false,則沒有啓用斷言
System.out.println(isOpen);
}
默認是關閉的,下面我們開啓斷言,在vm虛擬機中輸入參數-enableassertions 或簡寫 -ea
打開斷言:-ea
關閉斷言:-da,或者刪除-ea
三、JAVA斷言的格式
assert後面跟個冒號表達式。如果冒煙前爲true,則冒號後面的被忽略,否則拋出AssertionError,錯誤內容爲冒號後面的內容。
assert <布爾表達式>; assert <布爾表達式> : <錯誤信息>;
下面我們使用斷言
//assert <布爾表達式>
public static void method1(){
int i = 1;
assert i==2;
System.out.println("如果斷言正常,我就被打印");
}
//assert <布爾表達式> : <錯誤信息>
public static void method2(){
int i = 1;
assert i==2:"如果斷言錯誤,我就被打印";
System.out.println("如果斷言正常,我就被打印");
}
四、assert拋出的異常AssertionError是繼承自Error的
斷言失敗,JVM會拋出一個AssertionError錯誤,它繼承自Error,表示這是一個嚴重問題,開發者必須予以關注並解決之。
//assert <布爾表達式>
public static void method1(){
int i = 1;
try {
assert i==2;
System.out.println("如果斷言正常,我就被打印");
}catch (Exception e)
{
e.printStackTrace();
}
}
可以看到AssertionError是繼承自Error,而不是Exception,所以catch部分用Exception是不能捕捉到AssertionError信息的。