Pourquoi écrire Try without a Catch ou Enfin comme dans l'exemple suivant?
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>");
}
}
Comme expliqué ci-dessus, il s'agit d'une fonctionnalité de Java 7 et au-delà. try with resources
Permet d'ignorer l'écriture de finally
et ferme toutes les ressources utilisées dans try-block
Lui-même. Comme indiqué dans Docs
Tout objet qui implémente Java.lang.AutoCloseable, qui inclut tous les objets qui implémentent Java.io.Closeable, peut être utilisé comme ressource.
Voir cet exemple de code
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
Dans cet exemple, la ressource est BufferReader
objet car la classe implémente l'interface Java.lang.AutoCloseable
Et elle sera fermée que le bloc try s'exécute avec succès ou non, ce qui signifie que vous n'aurez pas à écrire br.close()
explicitement.
Une autre chose importante à noter ici est que si vous écrivez vous-même le bloc finally
et vos try
et finally
exception de levée de bloc, puis l'exception du bloc try
est supprimée.
En revanche, si vous utilisez l'instruction try-with-resources
Et que l'exception est levée à la fois par le bloc try
et par l'instruction try-with-resources
, Dans ce cas, l'exception de try-with-resources
est supprimée.
Comme le @Aaron a déjà répondu ci-dessus, j'ai juste essayé de vous expliquer. J'espère que ça aide.
Source: http://docs.Oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Il s'agit d'une nouvelle fonctionnalité de Java 7 et au-delà. Sans cela, vous auriez besoin d'un bloc finally
qui ferme la ressource PrintWriter out
. Le code ci-dessus est donc équivalent à:
PrintWriter out = null;
try {
PrintWriter out = ...
} finally {
if(null != out) {
try {
out.close();
} catch(Exception e) {} // silently ignore!
}
}