JAVA入门 - 自定义异常类

虽然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", "数据插入出错");
    }
}

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

你可能感兴趣的:(JAVA入门 - 自定义异常类)