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