抓住两个例外,一个是另一个的超类

时间:2013-08-14 02:48:27

标签: java exception exception-handling ioexception

我有一个解析文本和创建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,但这并不像我希望的那样干净。对不起,我没有那么好描述,并提前感谢。

2 个答案:

答案 0 :(得分:3)

  

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

不,不会。

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

  

我想我可以使用一个布尔值,它将在EOFException区域中设置并在IOException区域中进行测试......

这不是必要的。 (无论如何它都无法发挥作用。)

参考文献:

答案 1 :(得分:1)

不,它不会。对于给定的尝试,最多只能执行一个catch块 - 不再需要。