Wenn Sie einige Ressourcen (InputStream, OutputStream, BufferedReader usw.) im try-Block verarbeiten, indem Sie die close-Methode im finally-Block vor Java7 aufrufen, wird die Ressource unabhängig davon, ob die Verarbeitung im try-Block normal oder abnormal beendet wurde. Wurde garantiert sicher geschlossen. Es sieht aus wie das:
protected void copy(String src, String dest) throws IOException {
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dest);
try {
byte[] buf = new byte[100];
int n;
while ((n = in.read(buf)) >= 0) {
out.write(buf, 0, n);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
Darüber hinaus gibt es auch Überprüfungen, um zu verhindern, dass Ausnahmen im finally-Block auftreten.
} finally {
if (br != null)
try {
br.close();
} catch (IOException e) {
//Ausnahmebehandlung
}
}
Es gibt jedoch einige Probleme mit diesen Schreibstilen.
Java 7 führte die Try-with-Resources-Syntax für diese Probleme ein. Die Try-with-Resources-Syntax löst diese Probleme auf einmal.
Beschreiben Sie unmittelbar nach dem Versuch den Prozess zum Generieren der zu schließenden Ressource. Wenn mehrere Ressourcen geschlossen werden müssen, trennen Sie sie mit einem Semikolon.
protected void copy(String src, String dest) throws IOException {
try (InputStream inputStream = new FileInputStream(src); OutputStream outputStream = new FileOutputStream(dest)) {
byte[] buf = new byte[100];
int n;
while ((n = in.read(buf)) >= 0) {
out.write(buf, 0, n);
}
}
}
Wenn Sie so schreiben, ist das Verhalten wie folgt.
Dies löst die unter "Probleme beim Schließen von Ressourcen in try-finally" genannten Probleme.
Verwenden Sie Try-with-Resources anstelle von Try-finally, wenn Sie mit Ressourcen arbeiten, die geschlossen werden müssen