Java程序设计语言提供了三种可抛出结构(throwable):受检的异常(checked exception),运行时异常(run-time exception)和错误(error)。
- 「受检异常」即 IOException(I/O 输入输出异常),包括 IOException 及其子类异常,是指编译器在编译期间要求必须得到处理的那些异常,你必须在编译期处理了。
- 「非受检异常」即 RuntimeException(运行时异常)。
- 「Error 」是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。
常见的非检查性异常:
常见的检查性异常:
在决定使用受检的异常或者未受检的异常时,主要的原则是:如果期望调用者能够适当地恢复,对于这种情况就应该使用受检的异常。通过抛出受检的异常,强迫调用者在一个catch子句中处理该异常,或者将它传播出去。因此,在方法中声明要抛出的每个受检异常,都是对API用户的一种潜在指示:与异常相关联的条件是调用这个方法的一种可能结果。
总之,对于可恢复的情况,使用受检的异常;对于程序错误,则使用运行时异常。当然,情况并不总是那么黑白分明,,如果你相信有一种情况可能允许恢复,就使用受检异常。如果不清楚是否能恢复,就使用未受检的异常。