Why write Try-With-Resources without Catch or Finally?

java, try-with-resources

Solution

As explained above this is a feature in Java 7 and beyond. `try with resources` allows to skip writing the `finally` and closes all the resources being used in `try-block` itself. As stated in Docs

Any object that implements java.lang.AutoCloseable, which includes all objects which implement java.io.Closeable, can be used as a resource.

See this code example

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}

In this example the resource is `BufferReader` object as the class implements the interface `java.lang.AutoCloseable` and it will be closed whether the try block executes successfully or not which means that you won't have to write `br.close()` explicitly.

Another important thing to notice here is that if you are writing the `finally` block yourself and both your `try` and `finally` block throw exception then the exception from `try` block is supressed.

While on the other hand if you are using `try-with-resources` statement and exception is thrown by both `try` block and `try-with-resources` statement then in this case the exception from `try-with-resources` statement is suppressed.

As the @Aaron has answered already above I just tried to explain you. Hope it helps.

Source: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Problem

Why write Try without a Catch or Finally as in the following example? ``` protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet tryse</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet tryse at " + request.getContextPath() + "</h1>"); out.println("</body>"); out.println("</html>"); } } ```

Original source

Related problems