在 Java 中,自定义 throws 异常类,本质上是自定义异常类,然后在方法上使用 throws 声明抛出它。下面分步骤说明,并给出完整示例。
Java 异常分为两大类:
受检异常(Checked Exception)
Exceptiontry-catch 或 throws)运行时异常(Unchecked Exception)
RuntimeExceptionpublic class MyException extends Exception {
// 无参构造
public MyException() {
super();
}
// 带消息的构造
public MyException(String message) {
super(message);
}
// 带消息 + 原因的构造
public MyException(String message, Throwable cause) {
super(message, cause);
}
}
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 = 实际抛异常
如果你愿意,我可以帮你写一个真实业务场景的自定义异常设计(比如订单、用户、支付异常)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。