Was ist die Ausgabe dieses Codes?
public class Expextion {
public static void a() {
b();
System.out.println("after b");
}
public static void b() {
try {
c();
System.out.println("after c");
}
catch (Exception e) {
}
}
public static void c() throws Exception {
throw new Exception("");
}
public static void main(String[] args) {
a();
}
}
Kann mir jemand helfen, den Ablauf zu verstehen? Vor allem im catch-Block.
2 Antworten
main ruft a() auf.
a() ruft b() auf.
b() ruft c() auf.
c() wirft sofort eine Exception.
Die Ausnahme wird vom catch-Block in b() gefangen.
Der catch-Block ist leer, also passiert nichts.
System.out.println("after c") wird nicht ausgeführt, da der Codefluss nach einer gefangenen Exception nicht in den try-Block zurückkehrt.
Die Kontrolle kehrt zu a() zurück.
System.out.println("after b") in a() wird ausgeführt, da die Ausnahme in b() bereits behandelt wurde.
Programm endet.
Ja, da "after c" nach c() kommen würde, welches eine Exception würft.
Da im a() Block b() abgehandelt wird kommt danach "after b" als Ausgabe.
Der Ablauf ist so: main ruft a() auf, a() ruft b() auf. In b() wird c() aufgerufen, das eine Exception wirft. Die Exception wird vom catch-Block in b() abgefangen, aber da der Block leer ist, passiert nichts weiter. Danach wird “after b” in a() ausgegeben, weil der Ablauf dort weitergeht.
Gibst du mir ein Keks ? Das war eine ziemliche schwere Frage
ausgabe ist dann nur after b richtig?