Are resources closed before or after the finally?

前端 未结 2 2047
太阳男子
太阳男子 2020-12-15 02:48

In Java 7\'s try-with-resources, I don\'t know which order the finally block and the auto-closing happens. What\'s the order?

BaseResource b = new BaseResour         


        
相关标签:
2条回答
  • 2020-12-15 03:33

    The resource gets closed before catch or finally blocks. See this tutorial.

    A try-with-resources statement can have catch and finally blocks just like an ordinary try statement. In a try-with-resources statement, any catch or finally block is run after the resources declared have been closed.

    To evaluate this is a sample code:

    class ClosableDummy implements Closeable {
        public void close() {
            System.out.println("closing");
        }
    }
    
    public class ClosableDemo {
        public static void main(String[] args) {
            try (ClosableDummy closableDummy = new ClosableDummy()) {
                System.out.println("try exit");
                throw new Exception();
            } catch (Exception ex) {
                System.out.println("catch");
            } finally {
                System.out.println("finally");
            }
    
    
        }
    }
    

    Output:

    try exit
    closing
    catch
    finally
    
    0 讨论(0)
  • 2020-12-15 03:51

    The finally block is the last to be executed:

    Furthermore, all resources will have been closed (or attempted to be closed) by the time the finally block is executed, in keeping with the intent of the finally keyword.

    Quote from the JLS 13; 14.20.3.2. Extended try-with-resources:

    0 讨论(0)
提交回复
热议问题