2012-07-18 144 views
12

通常如果任何类扩展Exception,它将成为检查异常。 Runtime exception也扩展了Exception。那么它怎么样unchecked exception为什么运行时异常是未经检查的异常?

这是否像他们有一个自定义检查编译器对于这种特殊情况?

编辑:我有检查V/S未经检查的异常及其利弊& COS等我不除在回答他们之间的差异正确的想法。

回答

19

这是明确的规范,section 11.1.1

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

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

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

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

+0

为什么我们无法检查运行时异常?因为我们知道可能有NullPointerException,那么我们应该检查它。任何想法? – UnKnown 2016-03-19 10:59:03

+1

@UnKnown:不,你不希望你写的每一个方法都要捕获或者声明NullPointerException ...那太可怕了。 – 2016-03-19 11:30:30

+0

从概念上说,检查和未检查的异常之间没有区别?只是实施有所作为? – UnKnown 2016-03-19 11:33:16

7

是的。除Error,RuntimeException及其(直接或间接)子类以外,任何Throwable都是检查的例外。

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


为了进一步详细一点。 。 。它并不像有任何种类的“检查异常”界面。逻辑是简单的硬编码:“任何异常类都是检查异常,除非它是RuntimeExceptionError的子类型”。

+0

+1指出编译器检查异常。 – DerMike 2012-07-18 18:31:03

+0

谢谢你。更新了问题☺ – 2012-07-18 18:32:41

0

作为每11.1.1.例外

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

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

注意Throwable的子类必须不能通用(§8.1.2)。

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

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

错误是从普通程序通常不被预期收回所有异常的超类。

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

类错误是Throwable的一种单独的亚类中,从不同的异常在类层次结构,以允许程序使用的习语“}赶上(例外五){”(§11.2.3),以捕获所有的异常从哪个恢复可能是可能的,而不会捕获通常不可能恢复的错误。

RuntimeException类是Exception的直接子类。 RuntimeException是所有可能在表达式评估过程中由于许多原因而抛出的异常的超类,但是从中恢复仍然是可能的。

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

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

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

相关问题