【自定义异常处理】

本文介绍了Java中的异常处理机制,包括检查性异常、运行时异常和错误的分类。详细阐述了如何通过try-catch抛出和捕获异常,以及如何自定义异常类,如继承RuntimeException并结合枚举类记录异常信息。最后展示了自定义异常的使用示例。
摘要由CSDN通过智能技术生成

异常的三种类型

检查性异常

最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常

运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

错误

错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

常见的异常处理方法

抛出异常

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

异常捕获

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方进行异常捕获,并不会影响后续代码的执行。

自定义异常类

自定义一个异常类,继承RuntimeException

public class BizException extends RuntimeException {

    private Integer code;

    private Object data;

    public <T> BizException(ExceptionMessageEnum exceptionMessageEnum, T data) {
        super(LANGUAGE_EN.equals(LocaleContextHolder.getLocale().getLanguage())
                ? exceptionMessageEnum.name() : exceptionMessageEnum.message);
        this.code = exceptionMessageEnum.code;
        this.data = data;
    }

    public BizException(ExceptionMessageEnum exceptionMessageEnum) {
        super(LANGUAGE_EN.equals(LocaleContextHolder.getLocale().getLanguage())
                ? exceptionMessageEnum.name() : exceptionMessageEnum.message);
        this.code = exceptionMessageEnum.code;
    }

    public BizException(String message) {
        super(message);
    }

    public Integer getCode() {
        return code;
    }

    public Object getData() {
        return data;
    }
}

定义一个枚举类,记录异常结果

public enum ExceptionMessageEnum {

    ERROR(6000, "系统异常"),
    ID_IS_NULL(6001, "ID IS NULL")
    ;

    public Integer code;

    public String message;

    ExceptionMessageEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }
}

自定义异常使用

public class Test{
	public void checkId(TargetRequest targetRequest) {
        if (targetRequest.getId() == null) {
            throw new BizException(ID_IS_NULL);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值