我想问为什么我们不必在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/