为什么以下java语句编译成功?

时间:2011-11-21 09:28:23

标签: java compilation compiler-errors

我想知道为什么有一个空的try块然后捕获特定的异常是有意义的?有什么想法吗?

try {

} catch (Exception e) {
    // do nothing
}

3 个答案:

答案 0 :(得分:7)

这个想法是任何代码都可以抛出未经检查的异常,所以如果你正在捕捉可以捕获未经检查的异常的东西,编译器不会检查{{ 1}}块可以抛出任何东西。在try块中确实存在 no 代码的特殊情况下,这是不合适的 - 但它使语言更简单,并且它只是完全伪造的代码中的问题,我不希望显示在任何真正的代码库中。我猜有类似的情况,你只是用原语等做事,但它确实是一个边缘情况。大多数try块包含理论上会抛出未经检查的异常的代码。

如果您尝试捕获未在try块中抛出的已检查异常类型,然后,编译器将会抱怨。

答案 1 :(得分:2)

运行时异常未经过类型检查,可能会被无法预测地抛出

答案 2 :(得分:2)

并非编译的所有内容都应该“有意义”,只要您的代码不包含语法和语义错误,它就会编译,甚至可能会运行。

主要思想是代码的每个部分都可能抛出异常。 Try Catch块不会为编译的代码增加额外的开销,因此即使对于任何代码也没有问题。