Java之Checked Exception和Unchecked Exception使用的我的理解

**摘要:**最近一我的在搭程序后台框架,碰到了一个问题,就是Exception类型的使用。因而我有了如下的一些想法。linux

1、 为何须要使用异常

我的理解:在面向对象程序的开发过程当中,咱们须要对函数的输入输出检测。当被调用者执行过程当中出错的时候,在不改变大量改变现有程序结构的时候,在并没有的简单有效办法办法通知调用者调用异常,因此这时候异常出现了。
注意:
在linux开发中:调用出错,一般返回-1或者NULL,而且系统调用设置线程局部变量errno!=0,表示调用错误,而后咱们可使用strerror(errno)输出错误码。 这样每次函数调用咱们都须要检测返回值,改变了咱们编写代码的结构,很是麻烦。
下面就是几年前我为了简化linux函数调用写的一个宏,在linux内核内部有相似实现,你们能够去看下。
输入图片说明程序员

2、Java异常继承体系结构

下图简单介绍了一下Java的异常继承体系结构
输入图片说明安全

3、异常的分类及其做用

  1. CheckedException: (非RuntimeException及其子类以外的全部Exception)
    用于提醒开发人员调用API时候对异常处理,而且程序这次调用须要从异常中恢复。一旦运行时这些异常被抛出,表明程序编写一定有BUG。
  2. UnCheckedException:(RuntimeException及其子类)
    用于提醒开发人员调用API时候对异常处理,可是程序这次调用能够没必要恢复
  3. Error及其子类:
    程序彻底没必要恢复,甚至没必要捕捉,只须要在系统crash时,可以即时通知运维以及开发人员进行系统恢复,以及运行时软硬件环境排查进行。

4、开发时候使用什么样的Exception

  1. 只使用CheckedException
    优势:
    强迫程序员对异常进行处理 ,代码更加安全 缺点:
    a、函数声明throws列表过长,开发人员可能偷工减料,针对于须要多个catch块处理的,会被放入同一个catch块处理
    b、底层API抛出一个异常,函数可能会须要对多个地方进行改写
  2. 只使用Unchecked Exception
    优势:
    代码更加简洁,改动异常抛出时,不须要改动函数接口
    缺点:
    开发人员可能偷工减料,一个异常都不处理,统一交给全局异常处理模块来进行
  3. 二者混合使用 (JDK所采用的) 是上面两种的折中方案,也是最优方案,对于Checked以及Unchecked异常区分的好,开发事半功倍,可是区分的很差,致使开发过程混乱。

5、CheckedException与UncheckedException的区分

这几天思考了一下,关于如何区分,提炼为如下几句话:框架

  1. 被调用者能够恢复调用错误,不使用Exception,好比某些状况下传入null做为参数(按常理须要抛出一个CheckedException而且由调用者显示处理)
  2. 被调用没法处理的调用错误,可是调用者须要处理的程序错误,使用CheckedException,好比IOException,所打开文件不存在,那么调用文件打开API接口的函数必需要对此处理
  3. 被调用者与调用者都没法处理的状况,使用UncheckedException,好比ClassNotFoundException,咱们动态加载一个类,结果类的class文件不存在于classpath内,这种就直接让全局异常处理模块捕获该异常而且输出到日志中便可

6、总结

虽然异常区分的原则十分简单,可是每一个人对于程序错误是否是能够处理的,若是处理的话,须要由哪些部分来进行处理的理解不尽相同。虽然素质较高的开发人员,对于异常区分的理解可能会趋于相同,可是高素质的永远是少部分。
因此,在为了保证项目质量的状况下,总结起来就是在开发中尽可能只用一种异常,这样避免异常混用,形成程序异常处理体系的混乱不堪。运维

相关文章
相关标签/搜索