Java运行时异常和错误

4
根据《Java 21天自学教程》一书的说法,未经检查的异常也被称为运行时异常。因此,错误也是运行时异常,因为它们是未经检查的异常(或者它所说的不是这个意思吗?)。这让我对下面的陈述感到困惑。如果它谈论的是Java RuntimeExceptions,那么它是错误的,因为它们被描述为“异常描述由您的程序和外部情况引起的错误。这些错误可以被您的程序捕获和处理。”但另一方面,如果它指的是Java Errors,则它们是内部错误。那么这个陈述是完全正确还是错误的?

4
21天?认真的吗? :-) - ganeshvjy
2
“Error”根本不是“Exception”。 “Error”直接扩展自“Throwable”,并且是未经检查的。对“错误”的引用不应与Java类型“Error”混淆。 - Codebender
3个回答

6
最好的解释在官方文档中。 Throwable是超类,其中包括ErrorExceptionRuntimeExceptionException下的子类。
  • Error及其子类是未经检查的。
  • Exception及其子类是经过检查的;
    • 除了RuntimeException分支。

ErrorRuntimeException类之间的区别在于

  • Error不受您的控制。它们通常是一些系统/环境问题;例如:OutOfMemoryError
  • RuntimeException代表程序逻辑上的缺陷,即它在您的控制范围内。您可以更正它。例如:NullPointerException

非常感谢您的回答 :) 我确实知道throwable的层次结构,但我困惑的是 (未检查的异常==运行时异常) 这部分?正如我所教的那样,错误也是未检查的异常! - A Diss
是的,你说得对。ErrorRuntimeException都是未检查异常。 - Vineet
那么,“未检查异常,也称为运行时异常”是错误的吗?因为运行时异常只是未检查异常的一个子集,而不是等同的术语。 - A Diss
嗯,这取决于上下文。我们知道如果遇到“错误”就无能为力了。所以,关于它的讨论并不多。因此,我们感兴趣的唯一未经检查的异常是“RuntimeException”。这就是为什么许多人简单地概括为未经检查的异常,也称为运行时异常。但是,如果您想要技术上的精确性,那么是的,这是错误的。未经检查的异常可以是“Error”或“RuntimeException”中的任何一个。 - Vineet
啊,这解决了我之前的困惑 :) - A Diss

1
错误不应该被捕获,因为它是由严重问题引起的。 RuntimeException仅在运行时抛出,当您没有对可能抛出它们的代码进行栅栏时,编译器不会发出警告。 已检查的异常应该被捕获或将异常发送到调用级别。

0

运行时异常不需要有try-catch块,构造函数或方法也不需要throws语句。

来自Oracle的文档页面做了一些很好的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接