Java 的异常体系由一系列类构成,这些类派生自java.lang.Throwable
。Java 的异常体系主要分为三大类:Checked Exception
(受检查异常)、Unchecked Exception
(非检查异常)和 Error
(错误)。下面是对这些类的详细介绍:
1. Throwable
Throwable
是 Java 异常体系的根类。所有的异常类和错误类都直接或间接继承自Throwable
。
2. Exception
Exception
类是Throwable
的子类,表示程序可以捕获并且可以合理处理的异常。
2.1 Checked Exception
Checked Exception
是指在编译时需要被显式处理的异常。这些异常通常是由于外部因素(如 I/O 操作、数据库访问等)引起的,必须通过try-catch
块或在方法上使用throws
声明处理。
常见的受检查异常包括:
IOException
:文件操作失败时抛出。SQLException
:数据库操作失败时抛出。ClassNotFoundException
:试图加载不存在的类时抛出。
public void readFile(String fileName) throws IOException {
FileReader file = new FileReader(fileName);
BufferedReader fileInput = new BufferedReader(file);
fileInput.close();
}
2.2 Unchecked Exception
Unchecked Exception
是指在编译时不需要被显式处理的异常。这些异常通常是编程错误(如逻辑错误或不正确的 API 使用)引起的,属于运行时异常。
常见的非检查异常包括:
NullPointerException
:试图访问null
对象的成员时抛出。ArrayIndexOutOfBoundsException
:数组下标越界时抛出。IllegalArgumentException
:传递非法参数时抛出。
public void divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Divisor cannot be zero");
}
int result = a / b;
}
3. Error
Error
类是Throwable
的子类,用于表示系统级错误和严重的问题,程序一般不应该捕获这些错误。Error
通常是由 JVM 抛出的,表示应用程序无法从中恢复的严重错误。
常见的错误包括:
OutOfMemoryError
:JVM 内存不足时抛出。StackOverflowError
:方法调用栈溢出时抛出。
public void infiniteRecursion() {
infiniteRecursion();
}
Java 异常层次结构总结
- Throwable
- Exception
- Checked Exception(受检查异常)
- IOException
- SQLException
- ClassNotFoundException
- Unchecked Exception(非检查异常)
- NullPointerException
- ArrayIndexOutOfBoundsException
- IllegalArgumentException
- Checked Exception(受检查异常)
- Error
- OutOfMemoryError
- StackOverflowError
- Exception
如何选择异常处理方式
- 使用
Checked Exception
当异常是可以预见的并且可以合理恢复时。 - 使用
Unchecked Exception
当异常是编程错误或逻辑错误时。 - 对于
Error
,一般不进行处理,因为它表示严重的系统错误。
通过合理地使用异常处理机制,可以使 Java 应用程序更加健壮和可靠。