我有一个解析文本和创建Object的工厂方法。在此工厂方法中,有一个部分可以读取直到流的末尾。我编写的另一种方法实现了解析器的这一部分。这是我正在使用的代码:
StringBuilder builder = new StringBuilder();
try {
while (reader.ready()) {
builder.append(reader.readLine());
}
} catch (EOFException e) {
// end method normally.
} catch (IOException e) {
throw e; // end method with an exception.
}
我想以不同于IOException的方式处理EOFException,因此我在不同的catch()
块中捕获它们。我的问题是:在EOFException
被抛出后,IOException
catch()
块会运行吗?我想我可以使用将在EOFException区域中设置并在IOException区域中进行测试的boolean
,但这并不像我希望的那样干净。对不起,我没有那么好描述,并提前感谢。
答案 0 :(得分:3)
我的问题是:在抛出EOFException之后,IOException catch()块会运行吗?
不,不会。
运行时尝试使用等效的instanceof
来匹配处理程序异常的异常,源代码顺序。第一个异常匹配确定将要执行的处理程序。该例外仅由try-catch处理一次。
我想我可以使用一个布尔值,它将在EOFException区域中设置并在IOException区域中进行测试......
这不是必要的。 (无论如何它都无法发挥作用。)
参考文献:
答案 1 :(得分:1)
不,它不会。对于给定的尝试,最多只能执行一个catch块 - 不再需要。