首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中的异常层次结构

java中的异常层次结构
EN

Stack Overflow用户
提问于 2010-04-09 09:04:49
回答 5查看 1.6K关注 0票数 2

因为error和Exception是可抛出类的子类,所以我们可以抛出任何Error、runtime ex和其他ex。我们也可以捕获这些类型中的任何一种。

为什么我们通常只捕获检查过的异常?

有没有人能给我提供很好的例子链接?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-09 09:13:45

检查异常的全部意义在于您需要捕获它。这是一种在正常程序执行中可能出现的错误类型(例如I/O错误),应用程序应该能够很好地处理它。

相反,未检查的异常是那些在程序的正常运行期间不应该发生的异常(它们以某种方式违反了规则),因此您不会尝试处理它,因为您可能没有太多可以做的事情。

票数 6
EN

Stack Overflow用户

发布于 2010-04-09 09:13:16

我认为你的假设是永远不会处理未检查的异常是错误的。当然,您永远不应该处理NullPointerExceptionIndexOutOfBoundsException等,因为它们指示编程中的逻辑错误,因此捕获它们实际上隐藏了程序中存在错误的事实。然而,一些API具有根植于RuntimeException的异常层次结构,如果是这样的话,您可能最终会捕获应用程序中大量异常的地狱;实际上,我以前开发了一个图形用户界面应用程序,其中需要处理从RuntimeException继承的大量不同的异常,而这个API恰好比Java语言中抛出检查异常的任何API使用得更多,所以在这种情况下实际上是相反的。

也就是说,如果确实有什么事情需要处理,那么按照惯例,这些都会变成受控异常(继承自Exception而不是RuntimeException)。此外,编译器会强制您处理这样的异常或将其声明为抛出(这就是“检查异常”的意思)。因此,约定和要求的组合可能就是为什么您要处理更多已检查的异常而不是未检查的异常的原因(因为按照约定,紧急的异常已经变成了已检查的异常,或者您忽略了重要的未检查的异常,因为您不需要处理它们)。

票数 3
EN

Stack Overflow用户

发布于 2010-04-09 09:14:18

为什么我们通常只捕获检查过的异常?

因为与未检查的异常(RuntimeExceptionError及其子类)不同,您需要捕获它们。相反,使用未检查异常的意义在于您不需要捕获它们,而常见的场景它让应用程序(通常是框架、容器或JVM)“上方”的一块软件来处理它们。在某些情况下,您可能需要或决定自己处理一个,并显式地捕获它。但这是一种例外情况。

有没有人能给我提供很好的例子异常链接?

也许是关于Exceptions的Java教程。

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

https://stackoverflow.com/questions/2604482

复制
相关文章

相似问题

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