„Ich möchte dir zeigen, wie Ausnahmen funktionieren. Das folgende Beispiel gibt dir einen groben Überblick darüber, was passiert:“
class AusnahmeBeispielOriginal
{
public static void main(String[] args)
{
System.out.println("main beginnt");
try
{
System.out.println("main vor dem Aufruf");
methode1();
System.out.println("main nach dem Aufruf");
}
catch (RuntimeException e)
{
String s = e.getMessage();
System.out.println(s);
}
System.out.println(„main endet");
}
public static void methode1()
{
System.out.println("methode1 beginnt");
methode2();
System.out.println("methode1 endet");
}
public static void methode2()
{
System.out.println("methode2");
String s = "Meldung: Unbekannte Ausnahme";
throw new RuntimeException(s);
}
}
public class AusnahmeBeispiel
{
private static Exception ausnahme = null;
public static void main(String[] args)
{
System.out.println("main beginnt");
System.out.println("main vor dem Aufruf");
methode1();
if (ausnahme == null)
{
System.out.println("main nach dem Aufruf");
}
else if (ausnahme instanceof RuntimeException)
{
RuntimeException e = (RuntimeException) ausnahme;
ausnahme = null;
String s = e.getMessage();
System.out.println(s);
}
System.out.println(„main endet");
}
public static void methode1()
{
System.out.println("methode1 beginnt");
methode2();
if (ausnahme != null) return;
System.out.println("methode1 endet");
}
public static void methode2()
{
System.out.println("methode2");
String s = "Meldung: Unbekannte Ausnahme";
ausnahme = new RuntimeException(s);
return;
}
}
„Ich bin völlig verloren.“
„In Ordnung. Ich erkläre dir, was da vor sich geht.“
„Im Beispiel links rufen wir nacheinander einige Methoden auf. In methode2
erstellen wir bewusst eine Ausnahme und lösen diese aus (wir erzeugen einen Fehler).“
„Das Beispiel rechts zeigt, was passiert.“
„Sieh dir methode2
an. Anstatt eine Ausnahme zu erstellen, erstellen wir ein RuntimeException
-Objekt, speichern es in der statischen Variable ausnahme
und verlassen dann die Methode sofort mit einer return
-Anweisung.“
„In methode1
prüfen wir nach dem Aufruf von methode2
, ob eine Ausnahme aufgetreten ist. Wenn es eine Ausnahme gibt, dann wird methode1
sofort beendet. Eine solche Überprüfung erfolgt indirekt nach jedem (!) Methodenaufruf in Java.“
„Wow!“
„Ja, wow.“
„In der rechten Spalte habe ich die main-Methode verwendet, um ungefähr zu zeigen, was passiert, wenn eine Ausnahme mit einem try-catch-Konstrukt abgefangen wird. Wenn es keine Ausnahme gibt, dann läuft alles wie erwartet weiter. Wenn es eine Ausnahme gibt und diese von derselben Art ist, die in der catch-Anweisung angegeben ist, dann behandeln wir sie.“
„Was haben throw
und instanceof
zu bedeuten?“
„Sieh dir dir letzte Zeile an: throw new RuntimeException(s);
. So erstellt man eine Ausnahme und löst diese aus. Damit befassen wir uns jetzt aber noch nicht. Das war nur ein Beispiel.“
„Wir verwenden ein instanceof B
,um zu überprüfen, ob das Objekt a
vom Typ B
ist, d.h. ob das durch die Variable ausnahme referenzierte Objekt eine RuntimeException ist. Das ist ein boolescher Ausdruck.“
„Ich glaube, das hab ich verstanden. Fast.“
GO TO FULL VERSION