未经检查的异常或运行时异常之间的区别

这是一个面试问题。未检查的异常和错误之间的主要区别是什么,因为两者都没有被捕获?他们将终止该计划。     
已邀请:
如其名称所述,未在编译时检查未经检查的异常,这意味着编译器不需要捕获或指定(使用
throws
)它们的方法。属于此类的类在11.2编译时检查JLS异常部分中详细说明:   未经检查的异常类是类
RuntimeException
及其子类,类
Error
及其子类。所有其他异常类都是已检查的异常类。 Java API定义了许多异常类,包括已检查和未选中的异常类。程序员可以声明其他检查和未检查的异常类。有关异常类层次结构的描述以及Java API和Java虚拟机定义的一些异常类,请参见第11.5节。 下图说明了异常层次结构: 类
Error
及其子类是普通程序通常不希望恢复的异常,如11.5异常层次结构中所述:   班级
Error
是独立的   
Throwable
的子类,不同于   
Exception
在类层次结构中,到   允许程序使用这个成语:
} catch (Exception e) {
     捕捉所有例外情况   没有可能恢复   捕获恢复的错误   通常不可能。 总而言之,
RuntimeException
是可以进行恢复的异常未经检查异常的子集(但未经检查的异常不是
RuntimeException
的同义词,因为许多人在这里回答)。     
JavaDocs很好地总结了这些。
java.lang.RuntimeException
:   RuntimeException是在Java虚拟机的正常操作期间可以抛出的那些异常的超类。      一个方法不需要在其throws子句中声明RuntimeException的任何子类,这些子类可能在方法执行期间抛出但未捕获。
java.lang.Error
:   Error是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。大多数此类错误都是异常情况。 ThreadDeath错误,虽然是“正常”条件,但也是Error的子类,因为大多数应用程序不应该尝试捕获它。      一个方法不需要在其throws子句中声明在执行方法期间可能抛出但未捕获的任何Error类,因为这些错误是永远不应发生的异常情况。 请注意,“未经检查的异常”仅仅是
RuntimeException
的同义词。     
注意:RuntimeException是未经检查的异常 未经检查的异常将是已知在执行中的某个点可能但未被捕获的异常,例如,如果您不检查它们并且将导致程序终止,则总是有可能出现NullPointerException。您可以通过在try-catch中包装代码来检查它,但这不是强制执行的(与强制执行以某种方式处理异常的已检查异常不同)。 错误是在执行期间的任何时刻都可能发生的事情,并且不能真正被捕获,因为它不是由特定方法调用等引起的。例如OutOfMemoryError或StackOverflowError。这些都可能在任何时候发生,并将导致您的应用程序终止。抓住这些错误是没有意义的,因为它们表明发生了一些你无法恢复的事情。     
错误表明不应该发生的基本问题。如果你遇到错误s.th.真的很糟糕。 另一方面,无论何时以某种方式预期异常,都会使用未经检查的异常(运行时异常),但是没有合理的方法来处理它,因此try catch语句只会令人烦恼并浪费空间。     
检查异常: 除
RuntimeException
Error
之外延伸
Throwable
类的类称为已检查异常。 也称为编译时异常,因为在编译时检查这些类型的异常。这意味着如果我们忽略这些异常(未通过
try/catch
throw
处理异常),则会发生编译错误。 它们是程序可恢复的问题,这些问题是由代码控制之外的意外情况引起的(例如数据库关闭,文件I / O错误,输入错误等) 我们可以使用
try/catch
块来避免它们。 例如:
IOException
SQLException
等 未经检查的例外情况: 扩展
RuntimeException
的类称为未经检查的异常 在编译时不检查未经检查的异常,而不是在运行时检查它们。这就是为什么它们也被称为“运行时异常” 它们也是可编程恢复的问题,但与检查异常不同,它们是由代码流或配置中的错误引起的。 例如:
ArithmeticException
NullPointerException
ArrayIndexOutOfBoundsException
等 由于它们是编程错误,因此可以通过良好/明智的编码来避免它们。例如,“除以零”出现
ArithmeticEceeption
。我们可以通过一个简单的if条件来避免它们 -
if(divisor!=0)
。同样,我们可以通过简单地检查参考文献 -
if(object!=null)
或使用更好的技术来避免
NullPointerException
错误:
Error
指的是未被try / catch处理的不可恢复的情况 示例:
OutOfMemoryError
VirtualMachineError
AssertionError
等。     
错误:这些是应用程序外部的异常情况,应用程序通常无法预测或恢复。 运行时异常:这些是应用程序内部的异常条件,应用程序通常无法预期或从中恢复。 你可能想读这个:     
RuntimeExceptions
和像
OutOfMemoryError
这样的错误不需要被捕获,并且可以抛出,直到它们到达main(),这将终止应用程序。 如果没有捕获或包含在throws列表中,则其他异常会导致编译错误。     
错误和运行时异常统称为未经检查的异常。 运行时异常是应用程序内部的异常条件,应用程序通常无法预测或恢复。这些通常表示编程错误,例如逻辑错误或API的不当使用 您可能需要查看此链接,该链接解释了三种例外情况。 http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html 我希望这有帮助。     

要回复问题请先登录注册