Java异常体系

Java的异常体系(部分)如下图:


异常:

        程序运行过程中可能出现的非正常状态包括(受检异常/非受检异常)。异常是必须要进行处理的,是程序健壮性和安全性的保证。运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计没有问题通常不会发生。

Java.Lang.Throwable异常的两大子类:

    Error:Java虚拟机或者底层硬件相关的异常,不需要捕获,捕获了也无法处理。例如:OutOfMemoryError。

    Exception:程序本身抛出的异常,是程序严谨的一种体现,可以进行捕获并处理,如果不主动捕获,则由JVM处理。例如:RuntimeException(运行时异常/非检查异常)和 CheckedException(受检异常)。


受检异常和非受检异常:

        受检异常和非受检异常都是Exception异常的子类,可以进行捕获并处理的异常。

        RuntimeException的所有子类都是非受检异常,在Exception子类下非RuntimeException的子类的异常都是受检异常。

        受检异常:必须要进行捕获,通过 try/catch或者throws。 

        非受检异常:可捕获也可以不捕获。

受检异常的优缺点?

        异常是主逻辑的补充逻辑,修改补充逻辑会导致主逻辑的修改,有可能导致违反了代码规范。

        实现类的变更会影响调用者的封装性。

        频繁进行try/catch影响代码的结构,降低代码可读性。

        受检异常增加了代码的健壮性,但是会破坏代码主流程,为了对异常进行捕获、抛出需要增加代码,降低了代码的可读性。


什么时候使用受检异常?

        如果异常影响到系统运行的安全性和正确性,必须作为受检异常进行处理,否则这些受检异常都可以换成非受检异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。