繁体   English   中英

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

[英]Why runtime exception is unchecked exception?

通常,如果任何类扩展了Exception ,它就会成为已检查的异常。 Runtime exception也扩展了异常。 那么它是如何unchecked exception呢?

对于这种特殊情况,他们是否对编译器进行了自定义检查?

编辑:我对已检查的 v/s 未检查的异常及其优点和 cos 等有正确的了解。我不接受它们之间的差异作为答案。

它在规范中明确指出, 第 11.1.1 节

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

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

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

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

是的。 任何Throwable都是已检查的异常,但ErrorRuntimeException及其(直接或间接)子类除外。

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


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

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

它解释了未检查和已检查之间的区别并给出了一些示例。

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

按照11.1.1。 异常的种类

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

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

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

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

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

Error 是所有异常的超类,普通程序通常不会从中恢复。

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

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

RuntimeException 类是 Exception 的直接子类。 RuntimeException 是所有异常的超类,在表达式计算过程中可能由于多种原因抛出这些异常,但仍然可以从中恢复。

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

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

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

运行时异常称为未检查异常,因为它在编译时未检查。 除了ERRORRuntimeException之外, throwable 下的所有内容都是检查异常。 在程序中添加运行时异常会降低程序的清晰度。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM