Java自定义异常封装

Java里面的异常在真正工作中使用还是十分普遍的。什么时候该抛出什么异常,这个是必须知道的。

在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked异常的个概念。

一、checked异常和unchecked异常


这里之所以让大家清楚checked异常和unchecked异常概念,是因为:待会我们的异常是继承unchecked异常RuntimeException的。了解一下并无坏处嘛

checked异常:

表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。

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

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

unchecked异常:

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

不需要在代码中显式地捕获unchecked异常做处理。

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

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

 

 

二、异常封装实例

1.异常码枚举类

package com.rbs.enums;


/**
 * @Description: 错误枚举类
 * @Param:
 * @return:
 * @Author: ywj
 * @Date: 2019/5/21 0021
 */
public enum RongRunErrorCodeEnum {
    /**
     * 成功状态码
     */
    SUCCESS(0, "成功"),
    /**
     * 参数为空
     */
    PARAM_EMPTY(1, "参数为空"),
    /**
     * 获取openid为空
     */
    OPENID_IS_EMPTY(2, "获取openid为空"),
    /**
     * 登录失败
     */
    LOGIN_FAILED(3, "登录失败"),
    /**
     * openid未绑定
     */
    OPENID_NOT_BIND(4, "openid未绑定"),
    /**
     * 密码错误
     */
    WRONG_PASSWORD(5, "密码错误"),
    /**
     * 账号不存在
     */
    ACCOUNT_NOT_EXIST(6, "帐号不存在"),
    /**
     * 用户在该系统没有权限
     */
    ACCOUN_NO_AUTHORITY(7, "用户在该系统没有权限"),
    /**
     * base64编码为空
     */
    BASE64_IS_EMPTY(8, "base64编码为空"),
    /**
     * 图片识别类型为空
     */
    RECOGNITION_TYPE_EMPTY(9, "图片识别类型为空"),
    /**
     * 调用接口失败
     */
    CALL_INT_FAIL(10, "调用接口失败"),
    /**
     * 获取权限信息失败
     */
    GET_QX_FAIL(11, "获取权限信息失败"),
    /**
     * 获取信息不存在
     */
    PARAM_NOT_EXIST(12, "获取信息不存在"),
    /**
     * 系统异常
     */
    SYSTEM_ERROR(500, "系统异常");
    /**
     * 状态码
     */
    private Integer code;
    /**
     * 异常信息
     */
    private String msg;

    /**
     * 异常枚举信息
     *
     * @param code 状态码
     * @param msg  信息
     */
    RongRunErrorCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 获取状态码
     *
     * @return
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取信息
     *
     * @return
     */
    public String getMsg() {
        return msg;
    }


    /**
     *重写toString方法在控制台显示自定义异常信息
     * @return
     */
    @Override
    public String toString() {
        return "[异常码:"+this.code+" 异常信息:"+this.msg+"]";
    }
}

这里重写了toString的方法,用于控制台打印消息

2、创建一个异常类RRException,继承RuntimeException:

package com.rbs.exception;

import com.rbs.enums.RongRunErrorCodeEnum;
import com.rbs.enums.ServeEnum;
import com.rbs.enums.SysEnum;


/**
 * @ClassName CustomException
 * @Author ywj
 * @Describe 自定义异常
 * @Date 2019/5/21 0021 11:58
 */
public class RRException extends RuntimeException {
    /**
     * 自定义异常信息
     */
    private String msg;
    /**
     * 状态码
     */
    private int code = 500;
  


    /**
     * 使用枚举类限制异常信息
     * @param errorCodeEnum 异常封装枚举类
     */
    public RRException(RongRunErrorCodeEnum errorCodeEnum) {
        super( errorCodeEnum.toString());
        this.msg = errorCodeEnum.getMsg();
        this.code = errorCodeEnum.getCode();
    }

    /**
     * 获取异常信息
     * @return
     */
    public String getMsg() {
        return msg;
    }

    /**
     * 获取状态码
     * @return
     */
    public int getCode() {
        return code;
    }

    
}

这里要注意继承了RuntimeException,因为一般我们的业务异常都是运行时异常。我在这里就展示一个方法作为例子

 

3、测试类ExceptionTest.java:

package com.rbs.test;

import com.rbs.enums.HttpCodeEnum;
import com.rbs.enums.RongRunErrorCodeEnum;
import com.rbs.enums.ServeEnum;
import com.rbs.enums.SysEnum;
import com.rbs.exception.HttpException;
import com.rbs.exception.RRException;


/**
 * @ClassName exceptiontest
 * @Author ywj
 * @Describe
 * @Date 2019/5/28 0028 9:36
 */
public class exceptiontest {


    public static void main(String[] args) throws HttpException {

        ss();
    }

    public static void ss() throws HttpException {
        String str = null;
        if (str == null) {
            throw new RRException(RongRunErrorCodeEnum.PARAM_EMPTY, ServeEnum.ACTION, SysEnum.VALUE_MARKETING);
        }
    }

}

测试结果:

 

一般公司都会分装一个基础框架,异常分装是其中一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值