Java中运行时异常与受检异常的区别
程序员文章站
2022-03-26 20:59:29
面试中遇到一条题,Java中运行时异常与受检异常的区别。特此记录一下。所有的异常都集成自java.lang.Throwable,它有两个直接的子类:Error、Exception。Error错误:JVM内部出现的严重问题,无法恢复;Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理;RuntimeException:也叫非受检异常(unchecked exception).这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处...
面试中遇到一条题,Java中运行时异常与受检异常的区别。特此记录一下。
所有的异常都集成自java.lang.Throwable
,它有两个直接的子类:Error、Exception。
- Error错误:JVM内部出现的严重问题,无法恢复;
- Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理;
- RuntimeException:也叫非受检异常(unchecked exception).这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处理。 也就是说,这类异常再程序中,可以进行处理,也可以不处理;
- 受检异常(checked exception):这类异常是由一些外部的偶然因素所引起的。Java编译器强制要求处理。也就是说,程序必须进行对这类异常进行处理。
举例:
- 非受检异常:
NullPointerException
,ClassCastException
,ArrayIndexsOutOfBoundsException
,ArithmeticException
(算术异常,如除0溢出) - 受检异常:
Exception
,FileNotFoundException
,IOException
,SQLException
。
在Effective Java中对异常的使用给出了以下指导原则:
- 不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使用异常)
- 对可以恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发生)
- 优先使用标准的异常
- 每个方法抛出的异常都要有文档
- 保持异常的原子性
- 不要在catch中忽略掉捕获到的异常
本文地址:https://blog.csdn.net/Allen_Adolph/article/details/107587968