Jede Anweisungsliste setzt sich aus einer Folge von Anweisungen zusammen. In einem try...finally-Block werden zuerst die Programmzeilen in Anweisungsliste1 (try-Klausel) ausgeführt. Wenn dabei keine Exceptions auftreten, wird anschließend Anweisungsliste2 (finally-Klausel) ausgeführt. Bei einer
Exception wird die Steuerung an Anweisungsliste2 übergeben und danach die
Exception erneut ausgelöst. Befindet sich ein Aufruf der Standardprozedur Exit, Break oder Continue in Anweisungsliste1, wird dadurch automatisch Anweisungsliste2 aufgerufen. Daher wird die finally
-Klausel unabhängig davon, wie der try-Block beendet wird, immer ausgeführt.
Wenn eine
Exception ausgelöst, aber in der finally-Klausel nicht behandelt wird, führt sie aus der try...finally-Anweisung hinaus, und jede zuvor in der try-Klausel ausgelöste
Exception geht verloren. In der finally-Klausel sollten daher alle lokal ausgelösten Exceptions behandelt werden, damit die Behandlung anderer Exceptions nicht gestört wird.