Hallo,
wer weiss, ob ein derartiges „Konstrukt“ richtig ausgeführt wird
class public uuuuuu throws YYYYYException {
try {
…
-Durchführen einer Aktion_1 die eine Exception werfen kann-
…
if (x!=true) {
throw new YYYYException();
} else {
} catch ( Exception e der Aktion_1) {
- Fehlerbehandlung der Aktion_1}
}
finally {
…
}
}
angenommen x ist nun nicht true, dann wirft „der“ mir eine YYYYException. Die große Frage ist nun, wird die Finally Klausel der Aktion_1 noch abgearbeit ?
Mein Problem ich hab da noch DB-Verbindungen offen und wenn der beim throwen da wirklich komplett „aussteigt“ , dann macht der mir meine DB Verbindungen nicht zu (die ich in der Finally stehen habe), oder?
Wäre für einen Hinweis eines Profis dankbar,
Julian
Hallo,
Der „finally“-Block wird immer ausgeführt, d.h. egal ob die Exception fliegt oder nicht. Und ja er eignet sich ideal zum dichtmachen evtl. noch offener DB-Connections.
Gruss
Enno
Hallo, wie schon von Enno gesagt wird finally immer ausgeführt (sonst würde es auch keinen Sinn machen finally zu benutzen).
Das übliche Schema ist z.b. ein Connection Objekt auf null zu initialiseren (Achtung: Das muss vor dem try-Block geschehen sonst ist die Variable in finally unbekannt) und dann im finally zu prüfen ob sie initialisiert wurde und schließen. Wichtig zu wissen ist auch noch, dass der Finally-Block selbst Exceptions werfen kann, die werden beim Schließen einer Verbindung üblicherweise ignoriert oder nur geloggt (was will man auch noch machen wenn es nicht geklappt hat).
Du kannst try-finally auch übrigens ohne catch Block verwenden, je nachdem was du vor hast, zwei mögliche Implementierungen wären:
public void myMethod() throws SQLException {
Connection conn = null;
try {
conn = new Connection...;
// andere Statements die eine SQLException produzieren können
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception ex) {}
}
}
}
public void myOtherMethod() throws MyException {
Connection conn = null;
try {
conn = new Connection...;
// andere Statements die eine Exception produzieren können
} catch (Exception ex) {
throw new MyException("hat nicht geklappt!!!", ex) {
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception ex) {}
}
}
}
Grüße
Bruno
Danke
Hallo Bruno,
vielen Dank für deine Antwort! War sehr hilfreich!
Viele Grüße
Julian