try-with-resources中的catch是否涵盖了括号中的代码?

rus*_*tyx 3 java try-with-resources

它是由不明的文件,如果catch下一个try-with-resources覆盖初始化部分与否.

换句话说,给定此代码片段:

    try (InputStream in = getSomeStream()) {
        System.out.println(in.read());
    } catch (IOException e) {
        System.err.println("IOException: " + e.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

catch如果IOException被扔到里面我会被调用吗?getSomeStream()

或者catch仅覆盖花括号内的块,即 System.out.println(in.read())

Arn*_*aud 5

JLS开始,您的示例是一个扩展的try-with-resources.

具有至少一个catch子句和/或finally子句的try-with-resources语句称为扩展的try-with-resources语句.

在这种情况下 :

翻译的效果是将资源规范放在try语句的"内部".这允许扩展的try-with-resources语句的catch子句捕获由于 自动初始化或关闭任何资源而导致的异常.

所以,是的,您的catch块将捕获该异常.