2015-11-13 51 views
0

任何人都可以給我關於它的信息。我真的不明白這個例外的類型。ValidationException是運行時異常還是t不是?

謝謝

public class ValidationException extends Exception{ 

public ValidationException(){ 
super("There was a problem when validating data"); 
} 

public ValidationException(String message){ 
super(message); 
} 

public ValidationException(String message, Throwable throwable){ 
super(message, throwable); 
} 

public ValidationException(Throwable throwable){ 
super(throwable); 
} 
} 
+3

它擴展了Exception,而不是RuntimeException。 – WalterM

+0

謝謝!這是什麼意思,拋出子句作爲\t以及catch塊? – Abc

+0

必須由調用者處理異常。要麼重新拋出異常,要麼抓住它。運行時異常不需要直接處理 –

回答

0
  1. 這是一個「運行時異常」的(愚蠢),某種意義上說,它是在運行時發生異常。但是對於所有 Java異常來說都是如此......除了編譯器中的錯誤之外,等等。

  2. 它不是RuntimeException的子類。您已將其聲明爲Exception的子類,並且Exception不是RuntimeException的子類。 (事實上​​,情況正好相反:RuntimeExceptionException一個子類!)

  3. 這是一個檢查異常,因爲它不是RuntimeException(或Error)的子類。

由於它是一個檢查異常,所以有關檢查異常的Java規則適用。例如,任何拋出或傳播您的異常的方法都必須聲明它爲throws這個異常,或者是這個異常的超類的異常。


1 - 技術上,JLS描述此作爲方法本體的異常終止與此異常爲異常終止原因

0

Exception和RuntimeException之間的主要區別是我們需要在try/catch塊中包裝一個Exception。 RuntimeException不需要被捕獲,但它與Exception一樣致命。

public class Main{ 

    public static void main(String[] args) { 
    Thread.currentThread().setUncaughtExceptionHandler(
     new Thread.UncaughtExceptionHandler(){ 
     @Override 
     public void uncaughtException(Thread t, Throwable e){ 
      System.out.println("Uncaught Exception " + e); 
     } 
    }); 

    try{ 
     throwException(); 
    }catch(Exception e){ 
     System.out.println("Caught Exception " + e); 
    } 


    try{ 
     throwRuntimeException(); 
    }catch(Exception e){ 
     System.out.println("Caught RuntimeException " + e); 
    } 

    //unchecked, no need to wrap int try/catch 
    throwRuntimeException(); 
    } 

    public static void throwException() throws Exception { 
    throw new Exception(); 
    } 

    public static void throwRuntimeException() { 
    throw new RuntimeException(); 
    } 

} 

以上面的示例爲例。輸出是這樣的:

捕獲的異常java.lang.Exception的
抓到的RuntimeException了java.lang.RuntimeException
未捕獲的異常了java.lang.RuntimeException

正如你所知道的,通話throwRuntimeException()被拋出,並且由於沒有try/catch塊,所以它不知道如何處理它。這使線程崩潰,並且因爲有一個UncaughtExceptionHandler被調用。

然後還有一個錯誤,我不會去,因爲除了JVM拋出它之外,我對它不瞭解太多。 OutOfMemoryError就是一個例子。

相關問題