我使用Eclipse,它给我一个给予编译错误,当我使用这个代码
IOException的无法到达的catch块。此异常永远不会从try语句体中引发
public void f() {
try {
System.out.println("");
} catch (IOException e) {
// TODO: handle exception
}
}
字符串
但是当我使用Exception而不是IOException编译时,两者都是检查异常,我做错了什么?
1条答案
按热度按时间3htmauhk1#
catch (Exception e)
是Java语言规范中的一种特殊情况。如果
catch
子句可以捕获检查异常类E1
,并且与catch
子句对应的try
块可以抛出作为E1
的子类或超类的检查异常类,除非E1
是Exception
或Exception
的超类,否则这是编译时错误。catch (IOException e)
只能捕获IOException
及其子类,它们是 all 检查异常。另一方面,
catch (Exception e)
可以捕获RuntimeException
及其子类(以及其他异常),它们是 not 检查异常。因此,不能得出catch
块永远不会被执行的结论。