2013-02-21 115 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块来处理它。 然而,异常被认为是应用程序异常,它是可以恢复的。

相关问题