Warum schreiben Sie Try ohne Catch oder Final wie im folgenden Beispiel?
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>");
}
}
Wie oben erläutert, ist dies eine Funktion in Java 7 und höher. try with resources
ermöglicht das Schreiben der zu überspringen finally
und schließt alle verwendeten Ressourcen try-block
selbst. Wie angegeben in Dokumente
Jedes Objekt, das java.lang.AutoCloseable implementiert, einschließlich aller Objekte, die java.io.Closeable implementieren, kann als Ressource verwendet werden.
Siehe dieses Codebeispiel
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
In diesem Beispiel ist die Ressource BufferReader
Objekt, da die Klasse die Schnittstelle implementiert java.lang.AutoCloseable
und es wird geschlossen, ob der try-Block erfolgreich ausgeführt wird oder nicht, was bedeutet, dass Sie nichts schreiben müssen br.close()
ausdrücklich.
Eine weitere wichtige Sache, die hier zu beachten ist ist das, wenn Sie das schreiben finally
blockieren Sie sich und Ihre beiden try
und finally
block throw exception dann die Ausnahme aus try
Block wird unterdrückt.
Während auf der anderen Seite, wenn Sie verwenden try-with-resources
Anweisung und Ausnahme wird von beiden ausgelöst try
blockieren und try-with-resources
Anweisung dann in diesem Fall die Ausnahme von try-with-resources
Aussage unterdrückt.
Da der @Aaron bereits oben geantwortet hat, habe ich nur versucht, es Ihnen zu erklären. Ich hoffe es hilft.
Quelle: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Dies ist eine neue Funktion in Java 7 und höher. Ohne dies benötigen Sie eine finally
Block, der die Ressource schließt PrintWriter out
. Der obige Code ist also äquivalent zu:
PrintWriter out = null;
try {
PrintWriter out = ...
} finally {
if(null != out) {
try {
out.close();
} catch(Exception e) {} // silently ignore!
}
}
Sehen Die try-with-resources-Anweisung
Lesen Sie mehr über Versuche mit Ressourcen (Java 7)
– Eran
14. Oktober 2014 um 9:08 Uhr
Sehen Versuchen Sie es mit Ressourcen
– Justin
14. Oktober 2014 um 9:10 Uhr
Duplikat von „Ist es sinnvoll, „try-finally“ ohne „catch“ zu machen?“
– Juru
14. Oktober 2014 um 9:12 Uhr
@Juru: Dies ist in keiner Weise ein Duplikat davon …
– Oliver Charlesworth
14. Oktober 2014 um 9:13 Uhr
Allerdings glaube ich nicht, dass dies die erste Frage zu Try-with-Ressourcen ist. Trotzdem +1, einfach weil ich noch nie von dieser Funktion gehört hatte!
– Oliver Charlesworth
14. Oktober 2014 um 9:13 Uhr