„Ah. Da bist du ja. Ich habe nach dir gesucht.“

"Ist etwas passiert?"

„Nein, aber wir lernen noch.“

„OK. Ich höre zu.“

„Ich möchte Ihnen noch ein paar Dinge über Ausnahmen erzählen:“

„In Java 7 wurde das Try-Catch -Konstrukt durch das Hinzufügen mehrerer Catch- Blöcke leicht erweitert . Sehen Sie sich dieses Beispiel an:“

Java 5
try
{
  …
}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
Java 7
try
{
  …
}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

„Können wir jetzt also mehrere Ausnahmen schreiben, die durch ODER-Operatoren getrennt sind („|“ ist binäres ODER)?“

„Das stimmt. Ist das nicht praktisch?“

„Hmm. Aber welchen Typ wird das Ausnahmeobjekt im Catch-Block haben?“

„Schließlich hat eine IOException ihre Methoden, und eine SQLException hat ihre Methoden.“

„Der Ausnahmetyp wird der ihrer gemeinsamen Vorfahrenklasse sein.“

„Ah. Mit anderen Worten, es wird höchstwahrscheinlich Exception oder RuntimeException sein . Warum dann nicht einfach Catch(Exception e) schreiben?“

„Wenn Fehler einzeln behandelt werden, ist es manchmal praktisch, sie zu gruppieren, einige Fehler in ein Protokoll zu schreiben, andere erneut auszulösen und andere auf andere Weise zu behandeln.“

„Mit anderen Worten: Es wird angenommen, dass dieses Schema das Problem doppelter Catch-Blöcke zur Behandlung unterschiedlicher Fehler löst.“

„Ah. Ich verstehe. Danke, Ellie.“

„Das ist noch nicht alles. Ich möchte Ihnen etwas mehr über den „ finally“ -Block erzählen.“

„Wie Sie wahrscheinlich bereits wissen, wird dieser Block immer ausgeführt.“

„Und wenn ich immer sage, meine ich absolut immer .“

"Zum Beispiel:"

Beispiel für die Verwendung von „finally“.
try
{
 return 1;
}
 finally
{
 return 0;
}

„Hier gibt es eine Rückgabe im Try- Block und eine Rückgabe im Final- Block. Der Rückgabewert dieser Methode ist also die Zahl 0.“

„Der „ finally“ -Block wird ausgeführt, egal was passiert. Und seine Return- Anweisung überschreibt den anderen Rückgabewert mit seinem eigenen Wert.“

"Ich verstehe."

„ Eine Methode kann jedoch entweder einen Wert zurückgeben oder eine Ausnahme auslösen. “

„Wenn also ein Wert in einem Try-Block zurückgegeben wird, der Final- Block jedoch eine Ausnahme auslöst , dann ist das Ergebnis eine Ausnahme .

„Was passiert, wenn im Try- Block eine Ausnahme ausgelöst wird, der Final- Block jedoch eine Return-Anweisung hat?“

„Dann ist es so, als ob die Methode ordnungsgemäß funktioniert hätte und der Wert in der Return-Anweisung zurückgegeben würde.

Beispiel Ergebnis
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
RuntimeException
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

„Der einzige Grund, warum die Methode „final“ möglicherweise nicht ausgeführt wird, wäre die sofortige Beendigung des Programms durch einen Aufruf der Methode „System.exit();

Beispiel
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Ich verstehe."

„Denken Sie daran, dass all diese Themen normalerweise in Vorstellungsgesprächen angesprochen werden, daher wäre es gut, wenn Sie sie verstehen und sich daran erinnern.“