Java的异常分类
Java 的异常体系是基于 Throwable 类设计的,所有异常和错误都继承自它。主要分为 Exception(异常) 和 Error(错误) 两大类。
1 | Throwable |
Error错误
Error表示系统级错误,通常是 JVM 层面的问题,开发者一般不需要处理。- 这类错误通常不可恢复,程序很难继续运行。
- 开发者通常不需要捕获
Error,而是应该优化代码以避免它们发生。
常见的Error类型
| 错误类 | 描述 |
|---|---|
OutOfMemoryError |
内存溢出(如堆内存不足) |
StackOverflowError |
栈溢出(如递归调用过深) |
VirtualMachineError |
JVM 相关错误 |
ThreadDeath |
线程被强制终止 |
Exception
Exception 表示应用级的异常,开发者可以通过 try-catch 机制处理。
可以分为:
Checked Exception(受检异常、编译时异常) 编译时检查,必须处理Unchecked Exception(非受检异常、运行时异常) 运行时异常,可以不处理
Checked Exception(受检异常)
- 编译时必须处理,否则无法通过编译
- 需要
try-catch处理,或者throws抛出。 - 直接继承自
Exception,但不属于RuntimeException及其子类。 - 通常代表预期内的错误情况,例如 I/O 错误、数据库异常、文件未找到等,这些异常通常是可以恢复的或需要调用者显式处理的情况。
常见 Checked Exception
| 异常类 | 描述 |
|---|---|
IOException |
I/O 相关异常,如文件找不到 |
SQLException |
数据库异常,如 SQL 语法错误 |
ClassNotFoundException |
类加载失败 |
InterruptedException |
线程被中断 |
FileNotFoundException |
文件未找到 |
MalformedURLException |
URL 格式错误 |
ParseException |
转换异常 |
Unchecked Exception(非受检异常)
- 运行时异常,不要求必须处理,如果不处理,程序会终止。
- 继承自 **
RuntimeException**。 - 通常代表编程错误或逻辑错误,例如空指针访问(
NullPointerException)、数组越界(ArrayIndexOutOfBoundsException)、除以 0(ArithmeticException)等。这些异常往往由程序员错误引起,通常不应该在代码中主动捕获,而应通过改正代码来避免。
常见Unchecked Exception
常见 Unchecked Exception
| 异常类 | 描述 |
|---|---|
NullPointerException |
访问 null 对象 |
ArrayIndexOutOfBoundsException |
数组越界 |
ArithmeticException |
除零错误 |
ClassCastException |
类型转换异常 |
NumberFormatException |
数字格式错误 |
自定义异常
在 Java 中,可以自定义异常,通常继承自 Exception(受检异常)或 RuntimeException(非受检异常)。