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

时间:2012-07-18 18:24:58

标签: java exception runtimeexception

通常,如果任何类扩展Exception,则会检查异常。 Runtime exception也扩展了Exception。那怎么样unchecked exception

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

编辑:我对 已检查的v / s未经检查的例外 以及他们的专业人员有正确的认识。 cos等我不回答他们之间的差异。

5 个答案:

答案 0 :(得分:22)

在规范中明确指出section 11.1.1

  

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

     

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

     

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

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

答案 1 :(得分:7)

是。除ThrowableError及其(直接或间接)子类外,任何RuntimeException都是经过检查的例外。

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


进一步阐述。 。 。它不像是有任何“检查异常”界面。逻辑只是硬编码:“任何异常类都是经过检查的异常,除非它是[{1}}或RuntimeException的子类型。”

答案 2 :(得分:1)

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

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

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

答案 3 :(得分: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及其子类。

答案 4 :(得分: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