21

通常,如果任何类 extends Exception,它就会成为检查异常。Runtime exception还扩展了异常。那怎么样unchecked exception

他们是否有针对这种特殊情况的自定义检查编译器?

编辑: 我对checked v/s unchecked exception及其优点和cos等有正确的想法。我不接受它们之间的差异。

4

5 回答 5

28

它在规范中明确,第 11.1.1 节

RuntimeException它的所有子类统称为运行时异常类

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

检查异常类是除未检查异常类之外的所有异常类。也就是说,检查的异常类都是 Throwable 的子类,除了 RuntimeException 及其子类和 Error 及其子类。

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

于 2012-07-18T18:48:22.950 回答
10

是的。AnyThrowable是一个检查异常,除了Error, RuntimeException, 和(直接或间接)子类。

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


再详细一点。. . 好像没有任何类型的“检查异常”接口。逻辑只是硬编码:“任何异常类都是检查异常,除非它是RuntimeExceptionor的子类型Error”。

于 2012-07-18T18:27:40.433 回答
1

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

它解释了未选中和选中之间的区别,并给出了一些示例。

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

于 2012-07-18T18:29:19.450 回答
0

根据11.1.1。例外的种类

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

Throwable 及其所有子类统称为异常类。

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

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

异常是普通程序可能希望从中恢复的所有异常的超类。

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

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

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

RuntimeException 类是 Exception 的直接子类。RuntimeException 是所有异常的超类,在表达式评估期间可能由于多种原因引发,但仍可能从中恢复。

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

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

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

于 2014-11-25T12:54:24.930 回答
0

运行时异常称为未经检查的异常,因为它在编译时未检查。除了ERRORRuntimeException检查异常之外的所有东西都可以抛出。在程序中添加运行时异常会降低程序的清晰度。

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

于 2018-09-12T09:48:56.003 回答