Java 为什么编译带有catch异常的空try块?
不带任何代码的Java 为什么编译带有catch异常的空try块?,java,exception,Java,Exception,不带任何代码的试一下块: try { } catch (Exception ex) { // what Exception it is catching ex.printStackTrace(); } 没有任何代码意味着不可能抛出异常,那么为什么不给出一个“不可访问的catch block”编译错误呢?这是有效的Java语法。这与有一个空的if块相同: if (condition) { } 。。。或定义空方法: public void empty() { } 。。。或
试一下块:
try {
} catch (Exception ex) {
// what Exception it is catching
ex.printStackTrace();
}
没有任何代码意味着不可能抛出异常,那么为什么不给出一个“不可访问的catch block”编译错误呢?这是有效的Java语法。这与有一个空的if块相同:
if (condition) {
}
。。。或定义空方法:
public void empty() {
}
。。。或仅作为正文的一部分发表评论:
try {
// try body
} catch (Exception e) {
// catch body
}
所有这些都是有效的语法,因此编译器很高兴。此外,由于空行/空正文完全可以,因此在运行时,try
块的正文中不会抛出异常,因此代码也可以正常执行。Exception
包括RuntimeException
s,它们是未选中的,不需要声明,因此,异常
总是可以被有效捕获
我认为这是一个不重要的边缘案例。因此我假设您的问题是什么异常会被捕获,而答案是“无”。只有在try块中运行代码时抛出异常,才会捕获异常。然后,它将检查该异常是否被捕获(仅供参考,异常将捕获所有异常),如果是,它将在catch块内处理该异常,否则将导致错误。由于try块中没有任何内容,因此将永远不会捕获异常,因为无法引发任何异常。您能在此处为我们提供更多详细信息吗?你是如何编译这段代码的?您是否在Eclipse或IntelliJ等IDE中工作?此代码是否位于.java
源文件中?为什么不应编译?一个完全空的java文件也会编译。为什么会有问题?它只是一个块,如果你不想写代码,这取决于你。编译器检查错误,你没有任何错误。没有编译错误,必须编译。因为在你的try
block no error中,我认为关键是从技术上讲Exception
不能从任何代码中抛出,所以应该有一个“catching unthrown Exception”编译错误。如何从空块中抛出RuntimeException
?@fast see duplicate(我刚刚发现)想从传说中得到更完整的答案