Java 1.7具有try-catch资源,该资源本身可处理可关闭资源。意味着,当执行try-catch块时,资源将自动关闭。

我对try-catch块如何结束感到困惑。考虑以下两个方案。

情况1:

void function()
{
    try (closable)
    {
        doSomething();
    }
    catch (Exception)
    {}

    //at this point, the closable variable is closed
    //by try-catch statement. No issues and it's clear.
}


情况2:

void function()
{
    try (closable)
    {
        doSomething();
        return;
    }
    catch (Exception)
    {}

    //we never reached to this point, and this what
    //makes me think.Is closable really closed before
    //return statement or do we need to manually call
    //closable.close() before returning?
}


谢谢。

最佳答案

在返回语句之前,closable是否真的关闭了吗?还是需要在返回之前手动调用closable.close()?


是的,它会自动为您调用。

为了自己验证这一点,您可以在closeable对象的close()方法中放置一个断点,然后在debug模式下运行应用程序。在执行return;之后,您应该立即看到JVM在close()方法中停止其执行。

10-05 23:27