1

我有一个解析文本和创建对象的工厂方法。在这个工厂方法中,有一段会一直读到流的末尾。我编写了另一种方法来实现解析器的这一部分。这是我正在使用的代码:

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抛出 an 后,该IOException catch()块会运行吗?我想我可以使用boolean将在 EOFException 区域中设置并在 IOException 区域中进行测试的 a,但这并不像我希望的那样干净。对不起,我没有描述得很好,在此先感谢。

4

2 回答 2

3

我的问题是:抛出 EOFException 后,IOException catch() 块会运行吗?

不,不会的。

运行时尝试使用等效的instanceof来将异常与处理程序的异常按照源代码顺序进行匹配。第一个异常匹配确定将执行的处理程序。异常仅由 try-catch 处理一次。

我想我可以使用将在 EOFException 区域中设置并在 IOException 区域中测试的布尔值......

那是没有必要的。(无论如何它都行不通。)

参考:

于 2013-08-14T03:19:57.973 回答
1

No, it won't. At most one catch block will be executed for a given try -- no more.

于 2013-08-14T02:53:04.410 回答