JAVA入门

来源:互联网 发布:单片机复位电路原理 编辑:程序博客网 时间:2024/06/05 14:59

虽然JAVA已经拥有一系列的异常类,但在实际项目中,我们依然需要根据业务对异常进行封装及细分,让程序的错误更加地精确,清晰。

经过对[JAVA异常处理机制]{http://blog.csdn.net/gongm24/article/details/69815114}的学习,我们知道所有的异常类都继承自Throwable,而Throwable又分为Error及Exception,而我们要自定义异常类,应该是属于Exception分支下,所以通过继承Exception来实现自定义异常类是一个好的选择。

首先查看一下Exception的源码

public class Exception extends Throwable {    public Exception() {        super();    }    public Exception(String message) {        super(message);    }    public Exception(String message, Throwable cause) {        super(message, cause);    }    public Exception(Throwable cause) {        super(cause);    }    protected Exception(String message, Throwable cause,                        boolean enableSuppression,                        boolean writableStackTrace) {        super(message, cause, enableSuppression, writableStackTrace);    }}

源码中只有几个构造方法,而我们关注的焦点则放在message及cause两个属性上。
message:用户自定义错误信息,通过设置message我们可以使用用户可以看明白的语言表述错误。
cause:错误源,Throwable类型,可以设置当前异常是由什么异常引起,通过cause我们可以向上查找当前异常的源头,从而可以获取最原始的错误信息。

自定义异常类最关注的其实也是这两个属性,另外就是根据业务需要添加自定义属性。

比如:我们现在针对数据库操作异常进行统一封装,不光要有错误信息提示,还需要有相应错误代码,并且保存原始异常,可以根据当前异常寻找到原始异常,获取异常信息并打印。

public class DaoException extends Exception {    private static final long serialVersionUID = 1L;    private String errorCode;    public DaoException(String errorCode, String msg) {        super(msg);        this.errorCode = errorCode;    }    public DaoException(String errorCode, String msg, Throwable cause) {        super(msg, cause);        this.errorCode = errorCode;    }}

使用方法:

public int save(Object o) {    try {        // save action    } catch (Exception e) {        throw new DaoException("00100", "数据插入出错");    }}

这样就实现了一个简单的自定义异常类
很多时候,自定义异常类甚至不是为了处理什么业务问题,而仅仅是希望对异常进行细分,这样的自定义异常类内部没有任何其它逻辑,只是在发生异常时,我们可以根据不同的异常类名称判断出来是在什么地方发生的异常。实际项目中经常这样使用。

1 0