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



我想知道为什么在捕捉特定异常之后有一个空的try块是有意义的?任何想法吗?

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

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

如果你试图捕捉一个检查的异常类型,而不是在try块中抛出,那么编译器将会报错

运行时异常不进行类型检查,并且可能不可预测地抛出

不是所有编译的东西都应该"有意义",只要你的代码不包含语法和语义错误,它就可以编译,甚至很可能运行。

主要思想是代码的每个部分都可能抛出异常。Try Catch块不添加额外的开销到您的编译代码,因此没有问题使用它们,即使是任何代码。

最新更新