java 斷言的開啓和使用

一、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信息的。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章