8

一般来说,Java 中有两种处理异常的方法。

  1. 在方法签名中添加 throws 声明
  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;
    }
}

我注意到RuntimeException继承自Exception.

为什么RuntimeException不需要显式捕获来编译而其他Exceptions需要?

4

2 回答 2

1

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

于 2013-02-21T05:29:26.803 回答
1

“如果可以合理地期望客户从异常中恢复,则将其设为受检异常。如果客户无法从异常中恢复,则将其设为未受检异常。” http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html

于 2014-08-22T13:17:42.587 回答