一个try
块无需任何代码:为什么一个带有catch异常的空try块被编译?
try {
} catch (Exception ex) {
// what Exception it is catching
ex.printStackTrace();
}
的没有任何代码的含义是抛出异常是不可能的,所以为什么不这样给出一个“无法访问catch块”编译错误?
一个try
块无需任何代码:为什么一个带有catch异常的空try块被编译?
try {
} catch (Exception ex) {
// what Exception it is catching
ex.printStackTrace();
}
的没有任何代码的含义是抛出异常是不可能的,所以为什么不这样给出一个“无法访问catch块”编译错误?
这是有效的Java语法。这是同样具有一个空当块:
if (condition) {
}
...或定义一个空方法:
public void empty() {
}
...或者只是有意见作为身体的一部分:
try {
// try body
} catch (Exception e) {
// catch body
}
所有这一切是有效的语法,所以编译器是幸福的。此外,由于空白行/空体完全正常,因此在运行时不会有异常情况发生在try
块中,因此代码也可以正常执行。
我认为重点在于技术上'Exception'不能从无代码中抛出,所以应该有一个“捕获的可排除异常”编译错误。 – Bohemian 2015-03-03 05:52:25
Exception
包括RuntimeException
s,它们是未选中的并且不需要声明,所以Exception
总是可以被有效捕获。
我觉得这是一个不重要的边缘情况。
如何从空块中抛出'RuntimeException'? – fastcodejava 2015-03-03 06:02:26
@fast看到重复(我刚刚找到)从传奇自己更完整的答案 – Bohemian 2015-03-03 06:06:08
所以我假设你的问题是什么异常会被抓住,答案是没有。只有在try块内运行代码时抛出异常才会捕获异常。然后它会检查是否捕获到异常(FYI异常会捕获所有异常),如果是,它会在catch块内处理它,否则会导致错误。由于try块中没有任何内容,所以不会捕获异常,因为不会抛出任何异常。
你能不能给我们一些更详细的在这里?你如何编译这段代码?你在IDE或IntelliJ等IDE中工作吗?此代码是否位于'.java'源文件中? – 2015-03-03 05:46:32
为什么*不应该编译它?一个完全空的java文件也编译。 – Bohemian 2015-03-03 05:48:05
为什么这是什么问题?它只是一个块和高达你,如果你不想写的错误代码.Compiler检查,你不要有任何 – silentprogrammer 2015-03-03 05:48:53