温馨提示×

温馨提示×

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

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

如何自定义Throws异常类

发布时间:2026-07-26 18:37:15 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

Java 中,自定义 throws 异常类,本质上是自定义异常类,然后在方法上使用 throws 声明抛出它。下面分步骤说明,并给出完整示例。


一、异常的分类(先理解)

Java 异常分为两大类:

  1. 受检异常(Checked Exception)

    • 继承 Exception
    • 编译期强制要求处理(try-catchthrows
  2. 运行时异常(Unchecked Exception)

    • 继承 RuntimeException
    • 编译期不强制处理

二、自定义异常类

1️⃣ 自定义受检异常(推荐用于业务异常)

public class MyException extends Exception {

    // 无参构造
    public MyException() {
        super();
    }

    // 带消息的构造
    public MyException(String message) {
        super(message);
    }

    // 带消息 + 原因的构造
    public MyException(String message, Throwable cause) {
        super(message, cause);
    }
}

2️⃣ 自定义运行时异常(不强制处理)

public class MyRuntimeException extends RuntimeException {

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

三、在方法中使用 throws 声明异常

示例:方法抛出自定义异常

public class UserService {

    public void checkAge(int age) throws MyException {
        if (age < 18) {
            throw new MyException("年龄必须大于等于 18 岁");
        }
    }
}

✅ 说明:

  • throws MyException:告诉调用者“这个方法可能抛异常”
  • throw new MyException(...):真正抛出异常

四、调用方法时的两种处理方式

✅ 方式一:继续 throws(向上抛)

public class Test {
    public static void main(String[] args) throws MyException {
        UserService service = new UserService();
        service.checkAge(15);
    }
}

✅ 方式二:使用 try-catch 处理

public class Test {
    public static void main(String[] args) {
        UserService service = new UserService();
        try {
            service.checkAge(15);
        } catch (MyException e) {
            System.out.println("异常信息:" + e.getMessage());
        }
    }
}

五、运行时异常示例(不需要 throws

public void test() {
    throw new MyRuntimeException("运行时异常");
}

调用时可以不处理,但程序会中断。


六、什么时候用哪种异常?

场景 推荐
业务错误(必须处理) 自定义 Exception
程序 bug / 参数校验 RuntimeException
框架、工具类 RuntimeException

七、常见错误 ❌

❌ 只写 throws,不 throw
❌ 自定义异常继承 Throwable
❌ 把运行时异常用 throws 声明(没必要)


八、总结一句话

自定义异常类 = 继承 Exception / RuntimeException + 构造方法
throws = 方法签名上的声明,throw = 实际抛异常

如果你愿意,我可以帮你写一个真实业务场景的自定义异常设计(比如订单、用户、支付异常)。

向AI问一下细节

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

AI