为什么我们不必将run-catch添加到RuntimeException?

Moh*_*oud 19 java exception

我想问为什么我们不必添加try-catch块一段RuntimeException时间我们应该用其他异常来做?

我的意思是:

public class Main {
    public static void main(String[] args) {
       throw new RuntimeException();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:当我说:throw new RuntimeException();很明显会发生异常,为什么编译器不禁止这样做?

Bal*_*usC 31

那是因为它是一个未经检查的例外.它不需要显式声明或捕获.另请参阅有关此主题Sun教程.

更新:通常,您应该只抛出一个RuntimeException(最好是在javadoc中列出的一个子类)来表示调用者做错了.即传递一个null参数(然后抛出NullPointerException),或者一个非法的参数(然后抛出IllegalArgumentException),或者在错误的时刻/状态(然后抛出IllegalStateException)调用该方法,等等.调用者应该修复他们的代码以避免这种情况.例如,事先检查参数是否为null,或者参数的格式/语法是否正确,或确保在正确的时刻调用该方法.

如果存在应该抛出运行时异常并且不能使用其特定子类的特定情况,那么您应该扩展它并在新异常的javadoc和调用方法中正确记录它,例如ConfigurationException extends RuntimeException对于案例调用代码在使用前没有正确配置应用程序/ API.这应该足以表明最终用户(另一个开发者)采取相应的行动.

简而言之:RuntimeExceptions应该识别由代码流或配置中的错误引起的可编程恢复问题(读取:开发人员的错误).Checked Exceptions应该识别程序可恢复的问题,这些问题是由代码控制之外的意外情况引起的(例如数据库关闭,文件I/O错误,错误的最终用户输入等).Errors应该以编程方式识别不可恢复的问题(例如,内存不足,初始化程序内的异常等).