为什么运行时exception是未经检查的exception?

通常,如果任何类扩展了Exception ,它将成为检查exception。 Runtime exception还扩展了Exception。 那么如何unchecked exception呢?

对于这种特殊情况,他们是否有自定义检入编译器

编辑:我对已检查的v / s未经检查的exception及其优缺点等有正确的想法。除了答案之间的差异,我没有。

它在规范11.1.1中明确说明:

RuntimeException及其所有子类统称为运行时exception类

未经检查的exception类是运行时exception类和错误类。

检查的exception类是除未经检查的exception类之外的所有exception类。 也就是说,已检查的exception类是除RuntimeException及其子类和Error及其子类之外的Throwable的所有子类。

所以是的,编译器肯定知道RuntimeException

是。 除了ErrorRuntimeException和(直接或间接)子类之外,任何Throwable都是一个经过检查的exception。

但是,这些由编译器检查,而不是由JVM检查; 已检查的exception是编译时function,而不是运行时function。 ( 更新:我现在看到你编辑了你的问题以指定“编译器”而不是“JVM”。☺)


进一步详细说明。 。 。 它不像是有任何“检查exception”界面。 逻辑只是硬编码:“任何exception类都是一个经过检查的exception,除非它是RuntimeExceptionError的子类型”。

这是一个有用的链接: http : //www.javapractices.com/topic/TopicAction.do?Id=129

它解释了unchecked和checked之间的区别并给出了一些例子。

“这有点令人困惑,但请注意,RuntimeException(未经检查)本身就是Exception的子类(已选中)。”

按照11.1.1。 种类的例外

exception由Throwable类(Object的直接子类)或其子类之一的实例表示。

Throwable及其所有子类统称为exception类。

请注意,Throwable的子类不能是通用的(第8.1.2节)。

类Exception和Error是Throwable的直接子类。

例外是普通程序可能希望恢复的所有exception的超类。

错误是通常不希望普通程序恢复的所有exception的超类。

错误及其所有子类统称为错误类。

类Error是Throwable的一个独立子类,与类层次结构中的Exception不同,允许程序使用成语“} catch(Exception e){”(第11.2.3节)来捕获可能进行恢复的所有exception没有捕获通常无法进行恢复的错误。

RuntimeException类是Exception的直接子类。 RuntimeException是在表达式求值期间由于多种原因可能抛出的所有exception的超类,但仍可从中恢复。

RuntimeException及其所有子类统称为运行时exception类。

未经检查的exception类是运行时exception类和错误类。

已检查的exception类是除未经检查的exception类之外的所有exception类。 也就是说,已检查的exception类是除RuntimeException及其子类和Error及其子类之外的Throwable的所有子类。

运行时exception称为未经检查的exception,因为它在编译期间未被检查。 除了ERRORRuntimeException之外的所有东西都被检查exception。 在程序中添加运行时exception会降低程序的清晰度。

 class Divide { public static void main(String [] args){ int a = 10; int b = 0; int c = a/b; // This will throw run time exception due to unexpected value of b. } } 

请阅读此链接The Java™Tutorials – Unchecked Exceptions – The Controversy