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?

Inhaltsverzeichnis