Java的异常体系(部分)如下图:
异常:
程序运行过程中可能出现的非正常状态包括(受检异常/非受检异常)。异常是必须要进行处理的,是程序健壮性和安全性的保证。运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计没有问题通常不会发生。
Java.Lang.Throwable异常的两大子类:
Error:Java虚拟机或者底层硬件相关的异常,不需要捕获,捕获了也无法处理。例如:OutOfMemoryError。
Exception:程序本身抛出的异常,是程序严谨的一种体现,可以进行捕获并处理,如果不主动捕获,则由JVM处理。例如:RuntimeException(运行时异常/非检查异常)和 CheckedException(受检异常)。
受检异常和非受检异常:
受检异常和非受检异常都是Exception异常的子类,可以进行捕获并处理的异常。
RuntimeException的所有子类都是非受检异常,在Exception子类下非RuntimeException的子类的异常都是受检异常。
受检异常:必须要进行捕获,通过 try/catch或者throws。
非受检异常:可捕获也可以不捕获。
受检异常的优缺点?
异常是主逻辑的补充逻辑,修改补充逻辑会导致主逻辑的修改,有可能导致违反了代码规范。
实现类的变更会影响调用者的封装性。
频繁进行try/catch影响代码的结构,降低代码可读性。
受检异常增加了代码的健壮性,但是会破坏代码主流程,为了对异常进行捕获、抛出需要增加代码,降低了代码的可读性。
什么时候使用受检异常?
如果异常影响到系统运行的安全性和正确性,必须作为受检异常进行处理,否则这些受检异常都可以换成非受检异常。
网友评论