10 Behandeln und Weiterreichen einer Ausnahme
10 Behandeln und Weiterreichen einer AusnahmeIn der folgenden Implementierung wird eine Ausnahme behandelt und dann eine neue erzeugt. Welche Blöcke werden ausgeführt und warum? Wie sieht die Konsolenausgabe aus?
Hinweis: Der Code der im Vergleich zur Frage 9 geändert wurde, ist fett markiert:
package s1.block10; public class Frage10{ public static void main(String[] args) { int a = 5; int b = 0; int c = 0; System.out.println("main:before"); c = doubleDiv(a, b); System.out.println("main:after"); } static int doubleDiv(int a, int b) { int d; System.out.println("doubleDiv:before"); try { d = 2 * divide(a, b); } catch (IllegalArgumentException e) { System.out.println("doubleDiv: IllegalArgumentException: " + e.getMessage()); d = -2; } System.out.println("doubleDiv:after"); return d; } static int divide(int a, int b) { int d; System.out.println("divide:before"); try { d = a / b; } catch (IllegalArgumentException e) { System.out.println("divide: IllegalArgumentException"); d = -1; } catch (ArithmeticException e) { System.out.println("divide: ArithmeticException"); throw new IllegalArgumentException("Ich kann nicht mehr"); } catch (RuntimeException e) { System.out.println("divide: RuntimeException"); d = -3; } finally { System.out.println("divide: geschafft"); } System.out.println("divide:after"); return d; } // Ende main() } // Ende der Klasse
Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).
Niveau | 2 |
Schwierigkeitsgrad | mittel |
Zeit | 6 Minuten |
Antwort zu Frage 9: Programmablauf bei mehreren catch Blöcken
Der erste Catch Block in divide() wird nicht aufgerufen weil die entsprechende Ausnahme nicht vorliegt.
Der zweite Catch Block wird aufgerufen da die Ausnahme die passende ArithmeticExpetion ist.
Der dritte Catch Block wird nicht mehr aufgerufen obwohl eine ArtithmeticException auch eine RuntimeException ist. Die Ausnahme wurde schon im vorhergehenden Block behandelt.
Der finally Block wird immer durchlaufen.
main:before doubleDiv:before divide:before divide: ArithmeticException divide: geschafft divide:after doubleDiv:after main:after
- 4367 views