温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何自定义java异常

发布时间:2026-09-15 23:27:50 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

在 Java 中,自定义异常通常是指创建自己的异常类,用于表达业务或系统中特定的错误情况。下面从基本用法 → 常见写法 → 最佳实践逐步说明。


一、自定义异常的基本方式

1️⃣ 继承 Exception(受检异常)

适用于调用者必须处理的异常。

public class BusinessException extends Exception {
    public BusinessException(String message) {
        super(message);
    }
}

使用:

throw new BusinessException("余额不足");

2️⃣ 继承 RuntimeException(非受检异常)

适用于程序逻辑错误 / 业务校验失败(更常用)。

public class BusinessException extends RuntimeException {
    public BusinessException(String message) {
        super(message);
    }
}

二、常见增强写法(推荐)

✅ 带错误码(企业项目常用)

public class BusinessException extends RuntimeException {

    private final String code;

    public BusinessException(String code, String message) {
        super(message);
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}

使用示例:

throw new BusinessException("1001", "用户不存在");

✅ 支持 cause(异常链)

public class BusinessException extends RuntimeException {

    public BusinessException(String message, Throwable cause) {
        super(message, cause);
    }
}

✅ 枚举错误码(更规范)

public enum ErrorCode {
    USER_NOT_FOUND("1001", "用户不存在"),
    BALANCE_NOT_ENOUGH("1002", "余额不足");

    private final String code;
    private final String message;

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

    public String getCode() { return code; }
    public String getMessage() { return message; }
}
public class BusinessException extends RuntimeException {
    private final String code;

    public BusinessException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.code = errorCode.getCode();
    }
}

三、什么时候用自定义异常?

✅ 适合使用自定义异常:

  • 业务规则校验失败(如:订单状态异常)
  • 明确的错误分类(如:支付异常、权限异常)
  • 需要统一返回错误信息(前后端交互)

❌ 不适合:

  • 简单的空指针(用 NullPointerException)
  • 参数错误(可用 IllegalArgumentException)

四、全局异常处理(Spring 示例)

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    public ResponseEntity<?> handle(BusinessException e) {
        return ResponseEntity
                .status(400)
                .body(Map.of("code", e.getCode(), "msg", e.getMessage()));
    }
}

五、总结一句话

自定义异常 = 继承 Exception / RuntimeException + 合理构造方法 + 明确语义

如果你有具体场景(如:Spring Boot、支付系统、校验失败),我可以帮你设计一个更合适的异常体系。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手