没有任何代码的try
块:
try {
} catch (Exception ex) {
// what Exception it is catching
ex.printStackTrace();
}
没有任何代码意味着抛出异常是不可能的,那么为什么不给出“无法访问的catch块”编译错误呢?
答案 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块中没有任何内容,因此永远不会捕获异常,因为不会抛出任何异常。