Umair Hashmi
¿Por qué escribir Probar sin captura o Finalmente 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>");
}
}
Syed Ali Taqi
Como se explicó anteriormente, esta es una característica de Java 7 y versiones posteriores. try with resources
permite saltarse la escritura del finally
y cierra todos los recursos que se utilizan en try-block
sí mismo. Como se indica en Documentos
Cualquier objeto que implemente java.lang.AutoCloseable, que incluye todos los objetos que implementen java.io.Closeable, se puede utilizar 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 BufferReader
objeto como la clase implementa la interfaz java.lang.AutoCloseable
y se cerrará si el bloque de prueba se ejecuta con éxito o no, lo que significa que no tendrá que escribir br.close()
explícitamente.
Otra cosa importante a tener en cuenta aquí es que si estás escribiendo el finally
bloquearte a ti mismo y a tus dos try
y finally
bloquear lanzar excepción entonces la excepción de try
se suprime el bloqueo.
Mientras que, por otro lado, si está utilizando try-with-resources
la declaración y la excepción son lanzadas por ambos try
bloquear y try-with-resources
declaración entonces en este caso la excepción de try-with-resources
se suprime la declaración.
Como @Aaron ya respondió anteriormente, solo traté de explicarte. Espero eso ayude.
Fuente: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
-
Por lo tanto, es análogo al uso de C# & IDisposable.
– rufamático
25/10/2016 a las 17:26
-
@roufamatic sí, análogo, aunque la gran diferencia es que C#
using
no protege de ninguna manera contra las excepciones, solo garantiza el cierre del recurso al final del bloque. En C#, la mayoría de las veces tiene que combinarusing
bloques contry
bloques de Javatry-with-resources
hace esto juntos.–Michael Plautz
27 de abril de 2018 a las 4:26
Aarón Digulla
Esta es una característica nueva en Java 7 y posteriores. Sin esto, necesitarías un finally
bloque que cierra el recurso PrintWriter out
. Así que 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!
}
}
-
No son equivalentes. Si la excepción se produce tanto en el bloque try como en el bloque finalmente, la excepción del bloque try se suprimirá con try-and-catch. Por otro lado, si usa la declaración de prueba con recursos, se suprimirá la excepción del bloque finalmente (cierre automático lanza excepción).
– Nier
21 de diciembre de 2017 a las 9:30
-
@Nier Arregló la parte final.
– Aarón Digulla
30 de diciembre de 2017 a las 10:27
lea acerca de probar con recursos (Java 7)
– Eran
14 de octubre de 2014 a las 9:08
Ver Prueba con recursos
– Justin
14 de octubre de 2014 a las 9:10
Duplicado de “¿Tiene sentido hacer “intentar-finalmente” sin “atrapar”?”
– Juru
14 de octubre de 2014 a las 9:12
@Juru: Esto de ninguna manera es un duplicado de eso…
–Oliver Charlesworth
14 de octubre de 2014 a las 9:13
Habiendo dicho eso, no creo que esta sea la primera pregunta sobre probar con recursos. Sin embargo, ¡+1 simplemente porque nunca antes había oído hablar de esta función!
–Oliver Charlesworth
14 de octubre de 2014 a las 9:13