我正在使用 Eclipse,当我使用此代码时,它给我一个编译错误
无法访问 IOException 的 catch 块。这个例外从来都不是 从 try 语句主体抛出
public void f() {
try {
System.out.println("");
} catch (IOException e) {
// TODO: handle exception
}
}
但是当我使用 Exception 而不是 IOException 进行编译时,两者都是检查异常,我做错了什么
catch (Exception e)
是 Java 语言规范中的一个特例。 规则是
如果
子句可以捕获检查异常类catch
,并且与E1
子句对应的try
块不能抛出检查异常类,则这是一个编译时错误catch
的子类或超类,除非E1
是E1
或Exception
的超类。Exception
catch (IOException e)
只能捕获IOException
及其子类,即all检查异常。
另一方面,
catch (Exception e)
可以捕获RuntimeException
及其子类(除其他外),它们是not检查异常。因此,不能得出catch
块永远不会被执行的结论。