Der finally{}-Block



Wenn eine IOException in dem try{}-Block auftritt,
was passiert?

Eine gute Antwort wäre:

Die Ausführung dieser Methode wird beendet und die Methode
gibt eine IOException an den Aufrufer zurück.

Der finally{}-Block

Wenn eine IOException in diesem Programm auftritt, verliert es sofort die Kontrolle.
Die Ausnahme wird an die Methode weitergereicht, die sie aufgerufen hat.
In diesem Fall das Java Laufzeit System.
Die Ausführung wird für dieses Programm beendet.

Durch die Verwendung eines finally{}-Blocks können Sie sicherstellen,
dass bestimmte Anweisungen immer ausgeführt werden,
egal wie der try{}-Block verlassen wurde.
Hier ist die try/catch/finally{}-Struktur.

try
{
  // Anweisungen von denen einige
  // Ausnahmen auslösen könnten
}
catch ( IrgendeinExceptionTyp ex )
{
  // Anweisungen, um diesen Typ von Ausnahmen zu handhaben
}
....  // weitere catch-Blöcke
catch ( EinWeitererExceptionTyp ex )
{
  // Anweisungen, um diesen Typ von Ausnahmen zu handhaben
}
finally
{
  // Anweisungen, die ausgeführt werden
  // egal wie der try-Block verlassen wurde.
}
// weitere Anweisungen nach der Struktur

Es kann nur einen finally{}-Block geben und er muss
auf die catch{}-Blöcke folgen.

  1. Wenn der try{}-Block normal verlassen wird (es sind keine Ausnahmen aufgetreten), dann
    geht die Kontrolle direkt an den
    finally{}-Block.
    Nach dem finally{}-Block bekommen die Anweisungen, die auf die Struktur folgen, die Kontrolle.
  2. Wenn der try{}-Block auf Grund einer Ausnahme verlassen wird,
    die von einem catch{}-Block behandelt wird,
    wird zuerst dieser Block ausgeführt und dann
    geht die Kontrolle an den
    finally{}-Block.
    Nach dem finally{}-Block bekommen die Anweisungen, die auf die Struktur folgen, die Kontrolle.
  3. Wenn der try{}-Block auf Grund einer Ausnahme verlassen wird,
    die nicht von einem
    catch{}-Block behandelt wird,
    geht die Kontrolle direkt an den
    finally{}-Block.
    Nachdem der finally{}-Block ausgeführt ist,
    wird die Ausnahme an den Aufrufer zurückgegeben und es wird die Kontrolle
    an den Aufrufer zurückgegeben.

FRAGE 15:


Wird der finally{}-Block immer ausgeführt?