java 斷言

斷言在c語言中使用的可能比較多,java的話通常不怎麼會了解到。首先來看看java的api文檔,來看看java.lang.Throwable類。java

 

The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that areapi

instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by函數

the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a 測試

catch clause.this

 

意思是java中有且只有兩類東西可以被java虛擬機throw和catch---error和exception。spa

exception咱們就不說了你們都用的比較多,error有許多種,AssertionError就是Error的一個子類。AssertionError類一共指針

提供了七個構造函數確保斷言的錯誤可以被激起。同時它也和Exception類同樣繼承了getCause,initCause方法用來拋別的code

錯誤信息時保存原始的錯誤信息。有興趣的能夠了解下。繼承

 

要想讓斷言起效用,即讓斷言語句在運行時確實檢查,在運行含有assert的程序時,必須指定-ea選項
如:爲了可以讓下面的程序運行,咱們執行下面代碼:
文檔

public class TestAssert{
     public static void main(String[] args){
         String test;
         assert(test!=null):"變量test爲空null";
         System.out.println(test);
     }
}


java -ea TestAssert,這時就會拋出一個assertionError:變量test爲空null.

關閉斷言使用的是 -da(disableAssertion).

因爲斷言在正式發佈時是不起做用的,所以咱們應該避免用其實現任何程序的實際行爲,不然會出現測試時程序良好而發佈後出現一些錯誤,如:

  public static void main(String[] args){
        TestPerson personObj = newTestPerson("a simple test");
        String personName = null;
        assert(personName=personObj.getName())!=null;
        System.out.println(personName.length());
    }

測試時沒事,而發佈後卻出現空指針異常。

相關文章
相關標籤/搜索