今天我们对 java 入门进行一个收尾,然后咱们就可以同步开启 Java 数据结构部分啦!
只要不放弃,什么时候开始都不晚,让我们一起奋斗吧!
话不多说,开始正题!
一、什么是异常
通俗来讲,就是在我们写程序的时候出现了错误,导致程序无法运行,这个时候就需要异常来帮助我们判断是哪里出错,是一种有效的手段来帮助我们处理这些问题
二、异常分类
首先我们要知道,所有的异常都来自于 Throwable ,也就是所有异常都继承了 Throwable ,然后我们看下图所示:

既然计算机已经分好类了,但是我们万一不想用已有的异常,我们自己能不能自定义一个异常呢?
答案是:当然可以!
但是首先我们要先学好已有的异常,怎样抛出异常呢?
三、抛出与自定义异常的方法
抛出异常的方法
使用 throw 关键字在方法内手动抛出异常对象,适用于检测到非法参数或状态时:
java
public void validateAge(int age) {
if (age < 0) {
throw new RuntimeException("年龄不能为负数");
}
}
自定义异常的必要性
- 精准分类:区分业务场景(如"年龄非法"与"用户名重复")。
- 信息扩展:支持附加错误码、字段名等上下文。
- 统一处理:便于集中拦截特定业务异常。
自定义异常的实现步骤
1. 定义异常类
选择继承 Exception(受检异常)或 RuntimeException(非受检异常):
java
// 非受检异常示例
public class AgeException extends RuntimeException {
public AgeException() {
super();
}
public AgeException(String message) {
super(message);
}
}
2. 使用自定义异常
在业务逻辑中抛出:
java
public void setAge(int age) {
if (age < 0) {
throw new AgeException("年龄值非法: " + age);
}
this.age = age;
}
异常的高级用法
扩展异常类以携带更多上下文信息:
java
public class BusinessException extends RuntimeException {
private String errorCode;
private String field;
public BusinessException(String message, String errorCode, String field) {
super(message);
this.errorCode = errorCode;
this.field = field;
}
// Getter方法省略
}
调用示例:
java
throw new BusinessException("参数校验失败", "ERR_400", "age");
测试验证
捕获并处理自定义异常:
java
try {
person.setAge(-5);
} catch (AgeException e) {
System.err.println("业务异常: " + e.getMessage());
}
关键规范
- 命名 :异常类名以
Exception结尾(如InvalidAgeException)。 - 父类选择 :
RuntimeException:逻辑错误(非强制捕获)。Exception:外部依赖错误(强制捕获)。
- 构造方法 :至少实现无参和带
String参数的构造方法。