为什么RuntimeException不需要显式异常处理?

wns*_*349 6 java exception try-catch

通常,有两种方法可以处理Java中的异常.

  1. 在方法签名中添加throws声明
  2. 使用try/catch块进行环绕.

但是,我注意到一些异常,特别是那些继承的异常,RuntimeException不需要这样的显式异常处理.

例如,我创建了一个如下所示的示例方法,并为不需要显式异常处理的方法标记为"Not required".

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到了RuntimeException继承自Exception.

为什么RuntimeException不需要明确地捕获它而不是其他Exceptions呢?

Liu*_* Yi 1

对于Java来说,RuntimeException被认为是系统异常,一般情况下,它是不可恢复的,因此不需要在方法上添加 throws 声明或使用 try catch 块来处理它。但是,Exception被认为是应用程序异常,它是可恢复的。