Die catch{}-Blöcke sind in der richtigen Reihenfolge,
da ArithmeticException weder ein
Vorfahre noch ein Nachkomme von
NumberFormatException ist.
Die andere Reihenfolge der zwei Blöcke würde ebenso funktionieren.
In dem Beispielprogramm
könnte der try{}-Block
(1) eine IOException,
(2) eine NumberFormatException
oder
(3) eine ArithmeticException auslösen.
public static void main ( String[] a ) throws IOException . . . . try { System.out.println("Geben Sie den Zaehler ein:"); inData = stdin.readLine(); zahl = Integer.parseInt( inData ); System.out.println("Geben Sie den Divisor ein:"); inData = stdin.readLine(); div = Integer.parseInt( inData ); System.out.println( zahl + " / " + div + " ist " + (zahl/div) ); } catch (NumberFormatException ex ) { . . . } catch (ArithmeticException ex ) { . . . } }
Eine IOException könnte bei jeder readLine() Anweisung auftreten.
Es gibt keinen catch{}-Block für diesen Typ von Ausnahme,
also muss die Methode sagen throws IOException.
Eine NumberFormatException könnte bei jedem Aufruf der
parseInt() auftreten.
Der erste catch{}-Block ist für diesen Typ von Ausnahme.
Er wird Ausnahmen auffangen, die von jedem parseInt() ausgelöst werden.
Ein ArithmeticException könnte auftreten,
wenn der Anwender Daten eingibt, die
für eine Integer Division nicht erlaubt sind.
Der zweite catch{}-Block ist für diesen Typ von Ausnahmen.