这是一个面试问题。未检查的异常和错误之间的主要区别是什么,因为两者都没有被捕获?他们会终止这个程序。
发布于 2010-04-24 00:09:45
顾名思义,未检查的异常是在编译时时不检查的,这意味着编译器不需要方法来捕获或指定(使用throws)它们。属于此类别的类在JLS的11.2 Compile-Time Checking of Exceptions小节中有详细介绍:
RuntimeException Error类<
>E119>及其子类<>E220>。所有其他异常类都是选中的异常类。Java API定义了许多异常类,包括选中的和未选中的。附加的异常类,包括选中的和未选中的,都可以由程序员声明。有关异常类层次结构和Java API和Java虚拟机定义的一些异常类的描述,请参阅§11.5。
下图说明了异常层次结构:

类Error及其子类是异常,通常不希望普通程序从这些异常中恢复,如11.5 The Exception Hierarchy中所述
类
Error是Throwable的一个单独的子类,在类层次结构中与Exception不同,它允许程序使用以下习惯用法:
} catch (异常e) {
捕获所有可能恢复的异常,而不捕获通常无法恢复的错误。
总而言之,RuntimeException是可以恢复的异常的未检查异常的子集(但未检查异常不是RuntimeException的同义词,因为许多人在这里回答)。
发布于 2010-04-23 23:09:07
JavaDocs很好地总结了这些内容。
java.lang.RuntimeException
Java是这些异常的超类,这些异常可以在
虚拟机的正常操作期间抛出。
方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的RuntimeException的任何子类。
java.lang.Error
Throwable An Error是
的子类,表示合理的应用程序不应尝试捕获的严重问题。大多数这样的错误都是异常情况。虽然ThreadDeath错误是一种“正常”情况,但它也是错误的一个子类,因为大多数应用程序都不应该尝试捕获它。
方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的错误的任何子类,因为这些错误是不应该发生的异常情况。
请注意,“未检查的异常”只是RuntimeException的同义词。
发布于 2010-04-23 23:10:23
注意: RuntimeException是一个未检查的异常
未检查的异常是已知在执行过程中的某个点可能发生但未被捕获的异常,例如,如果您不检查它们,则总是有可能出现NullPointerException,这将导致程序终止。您可以通过在try-catch中包装代码来检查它,但这不是强制的(与强制以某种方式处理异常的受控异常不同)。
错误是在执行过程中的任何时刻都可能发生的错误,并且不能真正被捕获,因为它不是由特定的方法调用等明确导致的。例如,OutOfMemoryError或StackOverflowError。这两种情况随时都可能发生,并会导致您的应用程序终止。捕获这些错误没有任何意义,因为它们表明发生了一些您无法恢复的事情。
https://stackoverflow.com/questions/2699580
复制相似问题