关于java中自定义异常怎么定义

一、背景

1.项目中的异常肯定是必须的,定义好结构良好的异常类,可以快速的定位生产bug的位置。

二、异常码枚举

1.先定义一个异常码枚举处理

public enum ErrorCodeEnum {

    SYS_ERROR("SYS_ERROR","系统错误,请重试"),
    UNKNOWN_ERROR("UNKNOWN_ERROR","未知的系统异常"),
    SERVICE_INVOKE_FAIL("SERVICE_INVOKE_FAIL","服务器调用失败"),
    ILLEGAL_ARGS("ILLEGAL_ARGS","参数校验错误");

    //结果码值
    private String code;
    //描述
    private String desc;

    ErrorCodeEnum(String code, String desc) {
        this.code=code;
        this.desc=desc;
    }
    //还有一个根据枚举CODE去找相应枚举值,这个在实际开发中非常常用
    public static ErrorCodeEnum getByValue(String code) {
        for (ErrorCodeEnum result : ErrorCodeEnum.values()) {
            if (StringUtils.equals(result.code,code)) {
                return result;
            }
        }
        return null;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

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

三、自定义异常

1.注意有个异常枚举。

2.继承了RuntimeException。

3.个构造方法,还可以增加其他默认构造方法。一个完全根据异常码枚举的、一个是异常码枚举和异常描述。

public class CustomException extends RuntimeException {

    private static final long serialVersionUID=1L;
    //错误码
    private ErrorCodeEnum errorCode;
    //带参构造器,模版异常的构造方法
    public CustomException(ErrorCodeEnum errorCode){
        super(errorCode.getDesc());
        this.setErrorCode(errorCode);
    }
    //带自定义异常信息的构造方法
    public CustomException(ErrorCodeEnum errorCode,String message){
        super(StringUtils.isNotBlank(message)?message:errorCode.getDesc());
        this.setErrorCode(errorCode);
    }

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public ErrorCodeEnum getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(ErrorCodeEnum errorCode) {
        this.errorCode = errorCode;
    }
}

四、测试类

1.这里的catch可以封装一个result对象,把异常码、异常描述、成功与否封装进去

public class ExcepyionTest {
    public static void main(String[] args) {
        //String name=null;
        int i =0;
        try {
            /*if (name == null){
                throw new CustomException(ErrorCodeEnum.ILLEGAL_ARGS);
            }*/
            if (i==0){
                throw new CustomException(ErrorCodeEnum.ILLEGAL_ARGS,"参数不能为0");
            }

        }catch (CustomException e){
            e.printStackTrace();
            System.out.println("异常码"+e.getErrorCode().getCode());
            System.out.println("异常描述"+e.getMessage());
        }
    }
}

五、结果

1.第一个异常

异常码ILLEGAL_ARGS
com.example.demo.CustomException: 参数校验错误
异常描述参数校验错误
	at com.example.demo.ExcepyionTest.main(ExcepyionTest.java:9)

2.把测试类中的注释

异常码ILLEGAL_ARGS
com.example.demo.CustomException: 参数不能为0
异常描述参数不能为0
	at com.example.demo.ExcepyionTest.main(ExcepyionTest.java:10)

六、总结

1.定义异常类就可以,如果业务非常复杂可以把异常码类多搞几个出来。

2.项目中一个异常类够用了,通过不同异常码定义去区分业务异常。

3.强烈建议开发时定义异常码,越细越好,上了生产方便快速定位bug。

七、结束

Always keep the faith!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值