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