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

时间:2013-02-21 05:21:40

标签: java exception try-catch

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

  1. 在方法签名
  2. 中添加throws声明
  3. 使用try / catch块进行环绕。
  4. 但是,我注意到一些异常,尤其是从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;
        }
    }
    

    我注意到RuntimeException继承自Exception

    为什么RuntimeException不需要被明确地捕获来编译而其他Exceptions呢?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

"如果可以合理地期望客户端从异常中恢复,请将其作为已检查的异常。如果客户端无法执行任何操作以从异常中恢复,请将其设置为未经检查的异常。" http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html