Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未检查异常和运行时异常之间的区别_Java_Exception_Unchecked Exception - Fatal编程技术网

Java 未检查异常和运行时异常之间的区别

Java 未检查异常和运行时异常之间的区别,java,exception,unchecked-exception,Java,Exception,Unchecked Exception,这是一个面试问题。未检查异常和错误之间的主要区别是什么,因为两者都未被捕获?他们将终止程序。JavaDocs对这些进行了很好的总结 : RuntimeException是Java虚拟机正常运行期间可以抛出的异常的超类 方法不需要在其throws子句中声明在方法执行期间可能抛出但未捕获的RuntimeException的任何子类 : 错误是Throwable的一个子类,它表示一个合理的应用程序不应该试图捕获的严重问题。大多数此类错误都是异常情况。ThreadDeath错误虽然是“正常”情况,但也是

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

JavaDocs对这些进行了很好的总结

:

RuntimeException是Java虚拟机正常运行期间可以抛出的异常的超类

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

:

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

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


请注意,“未检查的异常”只是
运行时异常的同义词
运行时异常
和类似
OutOfMemoryError
的错误不需要捕获,可以抛出,直到它们到达main(),从而终止应用程序


其他异常如果未捕获或未包含在抛出列表中,则会导致编译错误。

注意:RuntimeException是未经检查的异常

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


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

错误表明根本不应该发生的问题。如果您遇到错误,请选择s.th。发生了非常糟糕的事情。
未经检查的异常(运行时异常)另一方面,只要异常可能以某种方式出现,但当时没有合理的方法来处理它,则会使用该异常,因此try-catch语句将非常烦人,浪费空间

如其名称所述,未检查的异常在编译时不被检查,这意味着编译器不需要方法来捕获或指定(使用
抛出
)它们。属于该类别的类别在JLS的章节中有详细说明:

未检查的异常类是类
RuntimeException
及其子类,以及类
Error
及其子类。所有其他异常类都是选中的异常类。JavaAPI定义了许多异常类,包括已检查和未检查的异常类。额外的异常类,无论是选中的还是未选中的,都可以由程序员声明。有关异常类层次结构以及Java API和Java虚拟机定义的一些异常类的描述,请参阅

下图说明了异常层次结构:

Error
及其子类是通常不希望普通程序从中恢复的异常,如中所述:

Error
是一个单独的类
可丢弃的子类
,与 类层次结构中的异常
,以 允许程序使用习惯用法:

} catch (Exception e) {
要捕获所有异常,请执行以下操作: 如果不采取行动,恢复可能是可能的 捕获要从中恢复的错误 通常不可能


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

错误和运行时异常统称为未检查异常

运行时异常是应用程序内部的异常情况,应用程序通常无法预测或从中恢复。这些通常表示编程错误,例如逻辑错误或API使用不当

您可能想看看这个链接,它解释了三种例外情况


我希望这能有所帮助。

错误:这些异常情况对应用程序来说是外部的,应用程序通常无法预测或恢复

运行时异常:这些异常情况是应用程序内部的,应用程序通常无法预料或从中恢复


您可能需要阅读:

检查异常:

  • 除了
    RuntimeException
    Error
    之外,扩展
    Throwable
    类的类称为检查异常
  • 也称为编译时异常,因为这些类型的异常是在编译时检查的。这意味着如果我们忽略这些异常(不使用
    try/catch
    throw
    异常处理),则会发生编译错误
  • 它们是由代码无法控制的意外情况(例如数据库关闭、文件I/O错误、错误输入等)引起的程序可恢复问题