为什么带有catch Exception的空try块编译?

时间:2015-03-03 05:42:27

标签: java exception

没有任何代码的try块:

try {

} catch (Exception ex) {
    // what Exception it is catching
    ex.printStackTrace();
}

没有任何代码意味着抛出异常是不可能的,那么为什么不给出“无法访问的catch块”编译错误呢?

3 个答案:

答案 0 :(得分:4)

Exception包含RuntimeException个,未经检查且无需声明,因此Exception始终可以被有效捕获。

我认为这是一个不重要的边缘案例。

答案 1 :(得分:2)

这是有效的Java语法。它与一个空的if-block相同:

if (condition) {

}

...或定义一个空方法:

public void empty() {

}

......或只是作为身体的一部分发表评论:

try {
  // try body
} catch (Exception e) {
  // catch body
}

所有这些都是有效的语法,所以编译器很高兴。此外,由于空白行/空体完全没问题,因此在运行时期间try块的主体中​​不会抛出任何异常,因此代码也会执行得很好。

答案 2 :(得分:1)

所以我假设你的问题是异常会被抓住而答案是否定的。只有在try块中运行代码时抛出异常才会捕获异常。然后它将检查是否捕获了该异常(FYI Exception将捕获所有异常),如果是,它将在catch块内处理它,否则会导致错误。由于try块中没有任何内容,因此永远不会捕获异常,因为不会抛出任何异常。