这是一个面试题。未检查异常和错误之间的主要区别是什么,因为它们都不会被捕获?它们将终止程序。
这是一个面试题。未检查异常和错误之间的主要区别是什么,因为它们都不会被捕获?它们将终止程序。
throws
)它们。属于此类别的类在JLS的11.2 Compile-Time Checking of Exceptions一节中有详细描述:
未检查异常类包括类
RuntimeException
及其子类和类Error
及其子类。所有其他异常类都是已检查异常类。Java API定义了许多异常类,其中既包括了已检查异常也包括了未检查异常。程序员可以声明其他异常类,既包括已检查异常也包括未检查异常。请参见§11.5,以获取异常类层次结构及Java API和Java虚拟机定义的一些异常类的说明。
以下图片说明了异常层次结构:
类Error
及其子类是普通程序通常不会从中恢复的异常,并且如11.5 The Exception Hierarchy所述:
Error
类是Throwable
的一个独立子类,在类层次结构中与Exception
不同,使程序可以使用以下习惯用法:} catch (Exception e) {
为了捕获所有可能进行恢复的异常,而不是捕获通常无法恢复的错误,
RuntimeException
是未经检查的异常的子集(但未经检查的异常并不是RuntimeException
的同义词,这点需要澄清)。
一个错误是Throwable的一个子类,它指示严重问题,合理的应用程序不应该尝试捕获。大多数这样的错误都是异常情况。ThreadDeath错误虽然是“正常”情况,但也是Error的一个子类,因为大多数应用程序不应该尝试捕获它。RuntimeException是Java虚拟机正常运行期间可能抛出的那些异常的超类。
方法不需要在其throws子句中声明可能在方法执行期间但未被捕获的任何RuntimeException子类。
RuntimeException
的同义词是具有误导性的(并且不正确)。 - Pascal ThiventRuntimeException
及其子类和类Error
及其子类。我不知道该添加什么,未检查异常并不是RuntimeException
的同义词。 - Pascal Thivent错误指的是绝对不应该发生的基本问题。如果你遇到一个错误,那么一定发生了非常糟糕的事情。
另一方面,未经检查的异常(运行时异常)则是在某种程度上可以预期可能会出现异常,但没有合理的方法来处理它,因此使用try catch语句只会徒增麻烦和浪费空间。
已检查异常:
RuntimeException
和Error
类之外,继承Throwable
类的类被称为已检查异常。try/catch
或throw
处理异常),则会发生编译错误。try/catch
块来避免它们。IOException
,SQLException
等未检查异常:
RuntimeException
的类被称为未检查异常ArithmeticException
、NullPointerException
、ArrayIndexOutOfBoundsException
等ArithmeticEceeption
。我们可以通过一个简单的if条件-if(divisor!=0)
来避免它们。同样,我们可以通过简单检查引用-if(object!=null)
或使用更好的技术better techniques来避免NullPointerException
错误:
Error
指的是不被 try/catch 处理的无法恢复的情况OutOfMemoryError
、VirtualMachineError
、AssertionError
等。RuntimeExceptions
和OutOfMemoryError
等错误不需要被捕获,可以一直抛出直到到达main()
函数终止应用程序。
其他异常如果没有被捕获或包含在throws列表中,将导致编译错误。
错误和运行时异常总称为未检查异常。
运行时异常是应用程序内部的异常情况,通常应用程序无法预料或恢复。这些通常表示编程错误,如逻辑错误或API的不当使用。
您可能想查看此链接,该链接解释了三种异常情况。
http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html
我希望这可以帮到您。java.lang.Error和java.lang.Exception都是java.lang.Throwable的子类。
java.lang.Error类表示由应用程序运行环境引起的错误。例如,当JVM耗尽内存或堆栈溢出时,会发生OutOfMemoryError或StackOverflowError。
而java.lang.Exception类表示主要由应用程序本身引起的异常。例如,当应用程序尝试访问null对象或尝试将不兼容的类类型强制转换时,会发生NullPointerException或ClassCastException。
java.lang.Exception的所有子类(除了RunTimeException的子类)都是已检查异常。例如,FileNotFoundException、IOException、SQLException、ClassNotFoundException等。
java.lang.RuntimeException和java.lang.Error的所有子类都是未检查异常。例如,NullPointerException、ArithmeticException、ClassCastException、ArrayIndexOutOfBoundsException、StackOverflowError、OutOfMemoryError等。