Java中异常分为Checked Exception和Unchecked Exception,区别在于编译器是否强制处理;2. 所有异常继承自Throwable,Exception的子类非RuntimeException的为Checked Exception,RuntimeException及其子类、Error及其子类为Unchecked Exception;3. Checked Exception必须try-catch或throws声明,否则编译失败,而Unchecked Exception无此要求;4. 常见Checked Exception有IOException、SQLException等,常见Unchecked Exception有NullPointerException、IllegalArgumentException及OutOfMemoryError等;5. 实际开发中Checked用于可恢复的外部问题,Unchecked多用于程序逻辑错误。

在Java中,异常分为两大类:Checked Exception(已检查异常)和 Unchecked Exception(未检查异常)。它们的核心区别在于编译器是否强制要求处理或声明。理解这种区分对编写健壮的代码非常重要。
从继承关系判断
Java中的所有异常都继承自 Throwable 类。其两个主要子类是 Exception 和 Error。
关键点:- Checked Exception 是指继承自 Exception 但不包括 RuntimeException 及其子类的异常。
- Unchecked Exception 包括 RuntimeException 及其子类,以及 Error 类及其子类。
简单来说:
- 凡是 Exception 的子类,但不是 RuntimeException 的子类 → Checked Exception
- 是 RuntimeException 或其子类 → Unchecked Exception
- 是 Error 或其子类 → Unchecked Exception(通常不处理)
从编译器行为区分
编译器会对 Checked Exception 进行强制检查。
立即学习“Java免费学习笔记(深入)”;
Android文档-开发者指南-第一部分:入门-中英文对照版 Android提供了丰富的应用程序框架,它允许您在Java语言环境中构建移动设备的创新应用程序和游戏。在左侧导航中列出的文档提供了有关如何使用Android的各种API来构建应用程序的详细信息。第一部分:Introduction(入门) 0、Introduction to Android(引进到Android) 1、Application Fundamentals(应用程序基础) 2、Device Compatibility(设备兼容性) 3、
- 如果方法可能抛出 Checked Exception,必须:
- 使用 try-catch 块捕获,或者
- 在方法签名中使用 throws 关键字声明抛出 - 如果不这么做,代码无法通过编译。
而 Unchecked Exception 不受此限制,可以不捕获也不声明,编译照样通过。
示例:
// IOException 是 Checked Exception
FileInputStream fis = new FileInputStream("file.txt"); // 必须 try-catch 或 throws
// IllegalArgumentException 是 Unchecked Exception
throw new IllegalArgumentException("参数错误"); // 可以不处理
常见类型对比
了解常见异常属于哪一类有助于快速判断。
-
Checked Exception 示例:
- IOException
- SQLException
- ClassNotFoundException
- FileNotFoundException
-
Unchecked Exception 示例:
- NullPointerException
- ArrayIndexOutOfBoundsException
- IllegalArgumentException
- NumberFormatException
-
Error 示例(一般不处理):
- OutOfMemoryError
- StackOverflowError
基本上就这些。记住:看继承链,再看编译器是否强制处理,就能清楚区分。实际开发中,Checked 异常适合用于可恢复的、外部因素导致的问题;Unchecked 异常多用于程序逻辑错误。









