在Java中,除Throwable
和Error
的实例以外,所有检查的例外都是RuntimeException
的实例。更具体地说,如果某个类扩展了Exception
,但没有扩展RuntimeException
,则它将被视为检查异常。
这就是为什么对于catch
块捕获受检查的异常的原因,编译器会检查是否可以从try
块中抛出该异常,如果不是这种情况,则会报告编译器错误:< / p>
import java.io.IOException;
public class ExceptionTest5 {
public static void main(String[] args) {
try{
} catch (IOException e) {
}
}
}
ExceptionTest5.java:10: error: exception IOException is never thrown in body of corresponding try statement
如果RuntimeException
在catch块中则不会报告。
但是,如果Exception
或Throwable
位于catch块中,则没有未报告任何内容,这使它们的行为就像未经检查的异常一样-与这篇文章的第一句话,我在许多不同的来源中都找到了。
那么Exception
是检查还是未检查的异常?