首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未检查异常与运行时异常的区别

未检查异常与运行时异常的区别
EN

Stack Overflow用户
提问于 2010-04-23 23:00:00
回答 8查看 31.9K关注 0票数 35

这是一个面试问题。未检查的异常和错误之间的主要区别是什么,因为两者都没有被捕获?他们会终止这个程序。

EN

回答 8

Stack Overflow用户

发布于 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中所述

ErrorThrowable的一个单独的子类,在类层次结构中与Exception不同,它允许程序使用以下习惯用法:

} catch (异常e) {

捕获所有可能恢复的异常,而不捕获通常无法恢复的错误。

总而言之,RuntimeException是可以恢复的异常的未检查异常的子集(但未检查异常不是RuntimeException的同义词,因为许多人在这里回答)。

票数 64
EN

Stack Overflow用户

发布于 2010-04-23 23:09:07

JavaDocs很好地总结了这些内容。

java.lang.RuntimeException

Java是这些异常的超类,这些异常可以在

虚拟机的正常操作期间抛出。

方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的RuntimeException的任何子类。

java.lang.Error

Throwable An Error是

的子类,表示合理的应用程序不应尝试捕获的严重问题。大多数这样的错误都是异常情况。虽然ThreadDeath错误是一种“正常”情况,但它也是错误的一个子类,因为大多数应用程序都不应该尝试捕获它。

方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的错误的任何子类,因为这些错误是不应该发生的异常情况。

请注意,“未检查的异常”只是RuntimeException的同义词。

票数 10
EN

Stack Overflow用户

发布于 2010-04-23 23:10:23

注意: RuntimeException是一个未检查的异常

未检查的异常是已知在执行过程中的某个点可能发生但未被捕获的异常,例如,如果您不检查它们,则总是有可能出现NullPointerException,这将导致程序终止。您可以通过在try-catch中包装代码来检查它,但这不是强制的(与强制以某种方式处理异常的受控异常不同)。

错误是在执行过程中的任何时刻都可能发生的错误,并且不能真正被捕获,因为它不是由特定的方法调用等明确导致的。例如,OutOfMemoryError或StackOverflowError。这两种情况随时都可能发生,并会导致您的应用程序终止。捕获这些错误没有任何意义,因为它们表明发生了一些您无法恢复的事情。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2699580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档