Skip to Content

9 Programmablauf bei mehreren catch Blöcken

Hier werden in der Methode divide() mehrere Ausnahmebehandlungen (catch Blöcke) zu dem gegebenen try Block angeboten. Welche Blöcke werden ausgeführt und warum? Wie sieht die Konsolenausgabe aus?

package Kurs2.Exception;

public class Frage5 {
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 (RuntimeException e) {
System.out.println("doubleDiv: RuntimeException");
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");
d = -2;
} catch (RuntimeException e) {
System.out.println("divide: RuntimeException");
d = -3;
}
finally {
System.out.println("divide: geschafft");
}
System.out.println("divide:after");
return d;
}
}

Die Antwort finden Sie hinter der nächsten Frage (URL rechts unten klicken).

Niveau 2
Schwierigkeitsgrad mittel
Zeit 6 Minuten

Antwort zu Frage 8: Programmablauf bei mehrern try-catch-Blöcken

Der try-catch Block in divide() wird nicht ausgeführt da keine IllegalArgumentException vorliegt. Erst der try-catch Block in der äusseren Methode doubleDiv() kommt zum Zug. Der letzte Dokumentationsaufruf in divide() wird daher nicht aufgerufen.

main:before
doubleDiv:before
divide:before
doubleDiv: Division durch Null
doubleDiv:after
main:after


blog | by Dr. Radut