Sie müssen keinen catch
Block haben, wenn Sie try
verwenden; Sie können auch einfach einen finally
Block haben. Ausnahmen, die in den Block try
geworfen werden, werden dann aus der Methode entfernt, aber der Block finally
wird immer noch ausgeführt, wenn eine Ausnahme auftritt.
public void myMethod() throws IOException {
InputStream in = new FileInputStream("...");
try {
// Do stuff that might throw IOException
} finally {
in.close();
}
}
Es ist jedoch viel besser, die try-with-resources Konstruktion zu verwenden (eine neue Funktion seit Java 7):
public void myMethod() throws IOException {
try (InputStream in = new FileInputStream("...")) {
// Do stuff that might throw IOException
}
}
Sie müssen die InputStream
nicht explizit schließen, wenn Sie dies tun; Es wird automatisch passieren (ob eine Ausnahme aufgetreten ist oder nicht).
(Ein Problem mit dem ersten Ansatz ist auch, dass in.close();
könnte auch eine IOException
werfen, und das Auslösen von Ausnahmen von einem finally
Block ist im Allgemeinen eine schlechte Idee).
Warum denken Sie, dass 'throw IOException' die Verwendung von' finally' in dieser Methode ausschließt? –
Sie können 'finally' ohne' catch' verwenden. – Tunaki
Auch: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html –