What's the purpose of try-with-resources statements?

user2589993 picture user2589993 · Jul 19, 2013 · Viewed 26.4k times · Source

Java 7 has a new feature called try-with-resources. What is it? Why and where we should use it and where we can take advantage of this feature?

The try statement has no catch block which confuses me.

Answer

morgano picture morgano · Jul 19, 2013

It was introduced because of some resources used in Java (like SQL connections or streams) being difficult to be handled properly; as an example, in java 6 to handle a InputStream properly you had to do something like:

InputStream stream = new MyInputStream(...);
try {
    // ... use stream
} catch(IOException e) {
   // handle exception
} finally {
    try {
        if(stream != null) {
            stream.close();
        }
    } catch(IOException e) {
        // handle yet another possible exception
    }
}

Do you notice that ugly double try? now with try-with-resources you can do this:

try (InputStream stream = new MyInputStream(...)){
    // ... use stream
} catch(IOException e) {
   // handle exception
}

and close() is automatically called, if it throws an IOException, it will be supressed (as specified in the Java Language Specification 14.20.3) . Same happens for java.sql.Connection