有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java捕获两个异常,一个是另一个的超类

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

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的方式处理EOFEException,因此我在不同的catch()块中捕获它们。我的问题是EOFException抛出后IOException{}块会运行吗?我想我可以使用一个boolean,它将在EOFEException区域中设置,并在IOException区域中测试,但这并不像我希望的那样干净。很抱歉,我没有很好地描述,提前谢谢你


共 (2) 个答案

  1. # 1 楼答案

    不,不会。对于给定的重试,最多将执行一个catch块

  2. # 2 楼答案

    My question is: after an EOFException is thrown, will the IOException catch() block run?

    不会的

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

    I suppose I could use a boolean that will be set in the EOFException area and tested in the IOException area ...

    这是没有必要的。(无论如何,它也不会起作用。)

    参考资料: