2013-02-21 59 views
6

一般來說,在Java的異常處理方法有兩種。爲什麼RuntimeException不需要顯式異常處理?

  1. 添加拋出聲明在方法簽名
  2. 環繞與try/catch塊。

但是,我注意到一些例外,特別是從RuntimeException繼承的例外,不需要這樣的顯式異常處理。

例如,我創建了一個示例方法如下,並標明「不需要」對於不要求明確的異常處理的人。

public void textException(){ 
    int i = (new Random()).nextInt(100); 

    switch (i){ 
    case 1: 
     throw new NullPointerException(); //Not required 
    case 2: 
     throw new NumberFormatException(); //Not required 
    case 3: 
     throw new RuntimeException();  //Not required 
    case 4:   
     throw new ClassNotFoundException(); //Required 
    case 5: 
     throw new IOException();   //Required 
    case 6: 
     throw new Exception();    //Required 
    default: 
     return; 
    } 
} 

我注意到,從ExceptionRuntimeException繼承。

那爲什麼RuntimeException並不需要明確陷入被編譯,而其他Exceptions呢?

+3

那些被稱爲經過和Java中未檢查異常。這些已在討論中多次討論http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation – 2013-02-21 05:24:35

+0

一個方法不需要在throws子句中聲明RuntimeException的任何子類可能在執行該方法期間拋出,但未捕獲。 – sudmong 2013-02-21 05:25:22

回答

1

對於Java,RuntimeException被認爲是系統異常,通常它不可恢復,因此您不需要在方法上添加throws聲明或使用try catch塊來處理它。 然而,異常被認爲是應用程序異常,它是可以恢復的。