java中的异常层次结构

时间:2010-04-09 01:04:49

标签: java exception-handling

由于Error和Exception是throwable类的子类,我们可以抛出任何错误,运行时ex和其他ex。我们也可以捕捉到这些类型中的任何一种。

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

有人可以通过示例为我提供良好的例外链接吗?

5 个答案:

答案 0 :(得分:6)

检查异常的重点是你需要抓住它。这是正常程序执行中可能出现的错误类型(例如I / O错误),应用程序可以正常处理它。

相反,未经检查的异常是在程序正常运行期间不应发生的异常(它们以某种方式破坏规则),因此您不会尝试处理它,因为您可能无法做很多事情。

答案 1 :(得分:3)

我认为从未处理未经检查的异常的前提是不正确的。当然,你永远不应该处理NullPointerExceptionIndexOutOfBoundsException等等,因为这些表明编程中存在逻辑错误,因此捕获它们实际上隐藏了程序中存在错误的事实。但是,某些API具有以RuntimeException为根的异常层次结构,如果是这种情况,那么您最终可能会在应用程序中捕获大量的内容;实际上,我之前开发了一个GUI应用程序,需要处理从RuntimeException继承的大量不同异常,而且这个API的使用比Java语言中任何抛出已检查的API都要多。异常,因此在这种情况下实际上是相反的。

也就是说,如果有一些绝对需要处理的东西,按惯例,这些都会被制成检查的异常(继承自Exception而不是RuntimeException)。此外,编译器强制您处理此类异常或声明它被抛出(这就是“已检查异常”的含义)。因此,约定和要求的组合可能就是为什么你可能处理更多检查而不是未经检查的异常(因为那些紧急的异常已按惯例制成检查异常,或者你忽略了重要的未经检查的异常,因为你没有强迫处理它们。)

答案 2 :(得分:1)

  

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

因为与未经检查的异常(RuntimeExceptionError及其子类)不同,您需要捕获它们。反过来说,使用未经检查的异常的关键是你不需要捕获它们和常见场景它让一块软件“高于”你的应用程序(通常是一个框架,一个容器,或者JVM)处理它们。在某些情况下,您可能需要或决定自己处理一个并明确地捕获它。但这是一种特殊的情况。

  

有人可以通过示例为我提供良好的例外链接吗?

也许关于Exceptions的Java教程。

答案 3 :(得分:0)

注意:已检查的异常在某些方面存在争议,并且在许多圈子中已经失宠(例如,Spring Framework在RuntimeException层次结构中包含了许多来自Java库的已检查异常,通常与“fault barrier”错误处理模式结合使用。 )

答案 4 :(得分:0)

  

为什么我们通常只接受检查   异常?

经过检查的异常提供了一种强制程序员以一种很好的方式考虑处理可预测错误的方法。处理I / O和网络时经常会出现这些“可预测”错误。我们更不经常捕获RuntimeExceptions,因为它们比检查异常更不可预测,并且在编程逻辑中捕获掩盖错误。例如,捕获NullPointerException是一种处理null值的懒惰方式,而更好的解决方案是找出对象为null的原因并直接处理它。当然,有时您会希望抓住RuntimeExceptions NumberFormatException

请注意,已检查的异常在Java中比大多数语言更重要,甚至像在Scala上构建的JVM上的语言也没有检查过的异常。

  

有人可以为我提供良好的链接   例子有例外吗?

有关Java异常的好文章,请参阅http://www.javaworld.com/javaworld/jw-07-1998/jw-07-exceptions.html

相关问题