java笔记7
12.异常
什么是异常
异常是指程序运行过程中发生的不正常情况,它中断了正常的指令流程。
Java异常类结构图
Java异常层次结构基于Throwable类,主要分为两大类:
Error:表示编译时和系统错误(如OutOfMemoryError),通常是不可恢复的。Exception:表示程序运行中可以捕获并处理的异常。
Error类与Exception类区别
Error:通常是JVM无法处理的严重问题,如StackOverflowError。Exception:是程序本身可以处理的异常情况,需要通过try-catch语句捕获并处理。
Exception分类
Exception分为两大类:
- 运行时异常(RuntimeException):如
NullPointerException、IndexOutOfBoundsException等,这类异常不强制要求被捕获或声明。 - 受检查异常(非运行时):如
IOException、SQLException等,这类异常必须被捕获或在方法签名中通过throws关键字声明。
异常处理机制
抛出异常
使用throw关键字在代码中手动抛出异常。
throw new IllegalArgumentException("参数不合法");
throw与throws用法
throw:在代码中直接抛出一个异常。throws:在方法签名中声明该方法可能会抛出的异常类型。
public void myMethod() throws IOException {
// 方法实现可能抛出IOException
}
捕获异常
使用try-catch语句捕获并处理异常。
try {
// 尝试执行的代码
} catch (IOException e) {
// 异常处理代码
}
处理顺序
如果有多个catch块,JVM会按照顺序检查异常类型,直到找到匹配的异常类型进行处理。
异常传播
异常可以在方法调用栈中向上传播,直到被捕获或到达最顶层。
自定义异常
创建自定义异常通常有两种方式:
- 继承
Exception类创建受检查异常。 - 继承
RuntimeException类创建运行时异常。
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class MyRuntimeException extends RuntimeException {
public MyRuntimeException(String message) {
super(message);
}
}
使用自定义异常可以让代码更加清晰和易于维护,同时也方便调用者根据异常类型进行相应的错误处理。
示例代码
public class ExceptionDemo {
public static void main(String[] args) {
try {
methodThatMayThrowException();
} catch (MyException e) {
System.out.println("捕获到自定义异常:" + e.getMessage());
}
}
public static void methodThatMayThrowException() throws MyException {
if (/* 某个条件 */) {
throw new MyException("发生了一个自定义异常");
}
// 其他代码
}
}
浙公网安备 33010602011771号