Java异常封装

转载: Java异常封装

Java里面的异常在真正工做中使用仍是十分广泛的。何时该抛出什么异常,这个是必须知道的。java

固然真正工做里面主动抛出的异常都是通过分装过的,本身能够定义错误码和异常描述。数据库

在给出异常分装例子以前,须要给你们普及Java里面的checked异常和unchecked异常的个概念。网络

1、checked异常和unchecked异常

这里之因此让你们清楚checked异常和unchecked异常概念,是由于:待会咱们的异常是继承unchecked异常RuntimeException的。了解一下并没有坏处嘛

checked异常:

表示无效,不是程序中能够预测的。好比无效的用户输入,文件不存在,网络或者数据库连接错误。这些都是外在的缘由,都不是程序内部能够控制的。框架

必须在代码中显式地处理。好比try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。ide

继承自java.lang.Exception(java.lang.RuntimeException除外)。测试

unchecked异常:

表示错误,程序的逻辑错误。是RuntimeException的子类,好比IllegalArgumentException, NullPointerException和IllegalStateException。this

不须要在代码中显式地捕获unchecked异常作处理。.net

继承自java.lang.RuntimeException(而java.lang.RuntimeException继承自java.lang.Exception)。指针

看下面的异常结构图或许层次感更加深些:code

2、异常分装实例

2.一、添加一个枚举LuoErrorCode.java以下:

package com.luo.errorcode;

public enum LuoErrorCode {

    NULL_OBJ("LUO001","对象为空"),
    ERROR_ADD_USER("LUO002","添加用户失败"),
    UNKNOWN_ERROR("LUO999","系统繁忙,请稍后再试....");

    private String value;
    private String desc;

    private LuoErrorCode(String value, String desc) {
        this.setValue(value);
        this.setDesc(desc);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "[" + this.value + "]" + this.desc;
    }
}

注意!!!这里咱们重写了LuoErrorCode的toString方法,至于为何要这样,后面会提到。

2.二、建立一个异常类BusinessException.java,继承RuntimeException:

package com.luo.exception;

public class BusinessException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public BusinessException(Object Obj) {
        super(Obj.toString());
    }

}

这里的代码虽然短,可是有两点须要注意的!!!第一点是其继承了RuntimeException,由于通常咱们的业务异常都是运行时异常。第二点,这里的构造方法调用父方法super(Obj.toString());,这就是重写了LuoErrorCode的toString方法的缘由了,若是还不明白,看完后面的你就明白了。

2.三、测试类ExceptionTest.java:

package com.luo.test;

import com.luo.errorcode.LuoErrorCode;
import com.luo.exception.BusinessException;

public class ExceptionTest {

    public static void main(String args[]) {
        Object user = null;
        if(user == null){
            throw new BusinessException(LuoErrorCode.NULL_OBJ);
        }
    }
}

运行结果:

补充一下:在咱们实际项目里面,好比别人调用你接口,你可能须要先看他传过来的对象是否是空的,先判断若是传过来的对象为空给有友好的提示”[LUO001]对象为空”,否则后面的代码估计会出现空指针异常了。

通常公司都会分装一个基础框架,异常分装是其中一部分,固然他们对异常的分装确定比我这个例子复杂多,所以本例仅供参考!

若是懒得copy和paste的话,直接下载工程吧:

http://download.csdn.net/detail/u013142781/9422684

相关文章
相关标签/搜索