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