异常
2025年9月23日大约 3 分钟
异常
说明
因为参加比赛所以很长时间没有更新,之后应该有时间都会每周不定时更新🤔
认识异常
Java的异常体系(异常的分类)

根据上图可以看到java异常分为两类 Error 和 Exception
- Error 代表系统级异常,不用处理
- Exception 代表程序级异常,需要处理
而在Exception下又分为两种异常- 运行时异常 RuntimeException及其子类,不需要显式处理,编译时不会报错,由 JVM 在运行时接管,如果不处理,异常发生时会导致程序中断
- 编译时异常 ,必须显式处理,否则编译不通过
Exception下的无论哪种异常,如果不进行处理,程序运行到异常处时,程序就会被终止
异常的基本处理
抛出异常(throw)
- 在方法上使用 throw 关键字,将方法内部出现异常抛出给调用者处理
public void test() throws Exception {
...(出现异常的代码)
}捕获异常(try...catch)
- 直接捕获程序出现的异常
try {
...(可能出现异常的代码)
} catch (Exception e) {
...(处理异常的代码)
}异常的作用
- 作用1: 异常用来定位程序bug的关键信息
- 作用2: 异常可以作为方法内部特殊的返回值,通知调用者,方法执行时的问题
- 返回异常给调用者
public void test() throws Exception { ...(出现异常的代码) throw new Exception("异常的具体原因"); // 返回的异常 }- 调用者捕获异常并处理
public static void main(String[] args) { try { test(); } catch (Exception e) { e.printStackTrace(); } }
自定义异常
自定义异常分为 自定义编译时异常 和 自定义运行时异常
在实际编程时一般使用 自定义运行时异常
创建并使用自定义异常
- 自定义编译时异常:
- 创建
- 定义一个异常类
- 继承Exception
- 使用
- 当需要使用这个异常返回时,在方法上使用 throws 这个异常类,并抛出给调用者即可
- 特点:编译就报错
- 创建
// 创建自定义编译异常类
public class MyException extends Exception {
public MyException() {
}
public MyException(String message) {
super(message);
}
}// 使用自定义编译异常类
public void test() throws MyException {
...(异常的判断条件)
throw new MyException("自定义异常");
}- 自定义运行时异常: 继承RuntimeException
- 创建
- 定义一个异常类
- 继承RuntimeException
- 使用
- 当需要使用这个异常返回时,在方法上使用 throws 这个异常类,并抛出给调用者即可
- 特点:运行时才报错
- 创建
// 创建自定义运行时异常类
public class MyRuntimeException extends RuntimeException {
public MyRuntimeException() {
}
public MyRuntimeException(String message) {
super(message);
}
}// 使用自定义运行时异常类
public void test() { //默认throw RuntimeException
...(异常的判断条件)
throw new MyRuntimeException("自定义异常");
}自定义异常总结
可以看到,两种自定义异常除了继承的类不同,在写法上并无太大差别
最大的区别在于异常是否在编译时出现
因此在编写代码时 除非严重异常,一般都推荐 自定义运行时异常