with try examples convert close catch java try-with-resources

java - examples - ¿Por qué escribir Try without Catch o Finally?



try() (2)

Como se explicó anteriormente, esta es una característica en Java 7 y más allá. try with resources permite omitir la escritura de finally y cierra todos los recursos utilizados en try-block . Como se indica en Documentos

Cualquier objeto que implemente java.lang.AutoCloseable, que incluye todos los objetos que implementan java.io.Closeable, se puede usar como recurso.

Ver este ejemplo de código

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

En este ejemplo, el recurso es el objeto BufferReader ya que la clase implementa la interfaz java.lang.AutoCloseable y se cerrará si el bloque try se ejecuta correctamente o no, lo que significa que no tendrá que escribir br.close() explícitamente.

Otra cosa importante para notar aquí es que si está escribiendo el bloque finally usted mismo y tanto su try como finally bloquea la excepción de tiro, entonces se suprime la excepción del bloque try .

Mientras que, por otro lado, si está utilizando el enunciado try-with-resources y la excepción try-with-resources y try-with-resources arroja una excepción, en este caso se suprime la excepción de la declaración try-with-resources .

Como @Aaron ha respondido anteriormente, intenté explicarte. Espero eso ayude.

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

¿Por qué escribir Try without a Catch o Finally como en el siguiente ejemplo?

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>"); } }


Esta es una nueva característica en Java 7 y más allá. Sin esto, necesitarías un bloque finally que cierra el recurso PrintWriter out . Entonces el código anterior es equivalente a:

PrintWriter out = null; try { PrintWriter out = ... } finally { if(null != out) { try { out.close(); } catch(Exception e) {} // silently ignore! } }

Ver la declaración de prueba con recursos