Java异常分为哪几种
在 Java 中,**异常(Exception)**主要分为以下几类,从整体结构到常用分类可以这样理解:
一、从继承结构上看(最核心分类)
所有异常都继承自 java.lang.Throwable,主要分为两大类:
1️⃣ Error(错误)
- 表示严重问题,通常程序无法处理
- 一般由 JVM 引起
- 不建议捕获
常见例子:
OutOfMemoryError(内存溢出)StackOverflowError(栈溢出)
try {
// 通常不建议捕获 Error
} catch (Error e) {
e.printStackTrace();
}
✅ 结论:
Error 不是异常处理的重点
2️⃣ Exception(异常)
表示程序可以处理的异常情况,是异常处理的核心。
Exception 又分为两大类:
二、Exception 的两种分类方式
✅ 1. 按“是否必须处理”分类(最常用)
(1)受检异常(Checked Exception)
- 编译期强制要求处理
- 要么
try-catch,要么throws
常见例子:
IOExceptionSQLExceptionFileNotFoundException
try {
FileInputStream fis = new FileInputStream("a.txt");
} catch (IOException e) {
e.printStackTrace();
}
✅ 特点:
编译器会检查你是否处理了
(2)运行时异常(Runtime Exception / Unchecked Exception)
- 编译期不强制处理
- 通常是程序逻辑错误
常见例子:
NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException
int a = 10 / 0; // ArithmeticException
✅ 特点:
可以避免,更多是代码问题
三、总结对比表
| 分类 | 是否必须处理 | 常见示例 | 说明 |
|---|---|---|---|
| Error | 否 | OutOfMemoryError | JVM 错误 |
| Checked Exception | ✅ 是 | IOException | 编译期检查 |
| Runtime Exception | 否 | NullPointerException | 运行期异常 |
四、常见面试题总结版回答 ✅
Java 异常分为 Error 和 Exception。
Exception 又分为 受检异常(Checked Exception) 和 运行时异常(Runtime Exception)。
Error 表示 JVM 错误,程序一般无法处理;受检异常在编译期必须处理;运行时异常通常由程序逻辑错误引起。
如果你愿意,我可以继续帮你讲:
- ✅ 自定义异常
- ✅
try-catch-finally执行顺序 - ✅
throws和throw区别 - ✅ 异常在面试中的高频考点