通常如果任何类扩展Exception
,它将成为检查异常。 Runtime exception
也扩展了Exception。那么它怎么样unchecked exception
?为什么运行时异常是未经检查的异常?
这是否像他们有一个自定义检查编译器对于这种特殊情况?
编辑:我有检查V/S未经检查的异常及其利弊& COS等我不除在回答他们之间的差异正确的想法。
通常如果任何类扩展Exception
,它将成为检查异常。 Runtime exception
也扩展了Exception。那么它怎么样unchecked exception
?为什么运行时异常是未经检查的异常?
这是否像他们有一个自定义检查编译器对于这种特殊情况?
编辑:我有检查V/S未经检查的异常及其利弊& COS等我不除在回答他们之间的差异正确的想法。
这是明确的规范,section 11.1.1:
RuntimeException
及其所有子类,统称为运行时异常类。未经检查的异常类是运行时异常类和错误类。
检查的异常类是除未经检查的异常类以外的所有异常类。也就是说,检查的异常类是除了RuntimeException及其子类和Error及其子类之外的Throwable的所有子类。
所以,是的,编译器肯定知道RuntimeException
。
是的。除Error
,RuntimeException
及其(直接或间接)子类以外,任何Throwable
都是检查的例外。
但是,这些由编译器检查,而不是由JVM检查;检查异常是编译时功能,而不是运行时功能。 (更新:而我现在看到你编辑你的问题,指定“编译”,而不是“JVM”☺。)
为了进一步详细一点。 。 。它并不像有任何种类的“检查异常”界面。逻辑是简单的硬编码:“任何异常类都是检查异常,除非它是RuntimeException
或Error
的子类型”。
+1指出编译器检查异常。 – DerMike 2012-07-18 18:31:03
谢谢你。更新了问题☺ – 2012-07-18 18:32:41
这里是一个有用的链接:http://www.javapractices.com/topic/TopicAction.do?Id=129
它解释了选中的区别和检查,并给出了一些例子。
“这有点令人困惑,但请注意,RuntimeException(未选中)本身也是Exception(checked)的子类。”
作为每11.1.1.例外
例外是由类Throwable(Object的直接子类)或其子类之一的实例表示的种类。
Throwable及其所有子类统称为异常类。
注意Throwable的子类必须不能通用(§8.1.2)。
类Exception和Error是Throwable的直接子类。
异常是普通程序可能希望恢复的所有异常的超类。
错误是从普通程序通常不被预期收回所有异常的超类。
错误及其所有子类统称为错误类。
类错误是Throwable的一种单独的亚类中,从不同的异常在类层次结构,以允许程序使用的习语“}赶上(例外五){”(§11.2.3),以捕获所有的异常从哪个恢复可能是可能的,而不会捕获通常不可能恢复的错误。
RuntimeException类是Exception的直接子类。 RuntimeException是所有可能在表达式评估过程中由于许多原因而抛出的异常的超类,但是从中恢复仍然是可能的。
的RuntimeException及其所有子类,统称为运行时异常类。
的未经检查的异常类是运行时异常类和错误类。
选中的异常类比未经检查的异常类之外的所有异常类。也就是说,检查的异常类是除了RuntimeException及其子类和Error及其子类之外的Throwable的所有子类。
为什么我们无法检查运行时异常?因为我们知道可能有NullPointerException,那么我们应该检查它。任何想法? – UnKnown 2016-03-19 10:59:03
@UnKnown:不,你不希望你写的每一个方法都要捕获或者声明NullPointerException ...那太可怕了。 – 2016-03-19 11:30:30
从概念上说,检查和未检查的异常之间没有区别?只是实施有所作为? – UnKnown 2016-03-19 11:33:16