我想问为什么我们不必在RuntimeException中添加try-catch块,而我们应该在其他异常(exception)情况下这样做呢?

我的意思是:

public class Main {
    public static void main(String[] args) {
       throw new RuntimeException();
    }
}

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

最佳答案

那是因为这是一个未经检查的异​​常。不需要显式声明或捕获它。另请参阅Sun tutorial on the subject

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

如果在特定情况下会引发运行时异常,并且您不能使用其特定子类之一,则应该扩展它并在新异常的javadoc和调用方法中正确记录它,例如如果调用代码在使用前未正确配置应用程序/API,则为ConfigurationException extends RuntimeException。这应该向最终用户(另一个开发人员)发出足够的信号,以采取相应的措施。

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

关于java - 为什么我们不必将try-catch添加到RuntimeException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2750638/

10-12 02:05