„Ich möchte dir zeigen, wie Ausnahmen funktionieren. Das folgende Beispiel gibt dir einen groben Überblick darüber, was passiert:“

Code, der Ausnahmen verwendet:
class ExceptionExampleOriginal
{


    public static void main(String[] args)
    {
        System.out.println("main begin");
        try
        {
            System.out.println("main before call");

            method1();



            System.out.println("main after call");
        }
        catch (RuntimeException e)
        {


            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();

        System.out.println("method1 end");
    }

    public static void method2()
    {
      System.out.println("method2");
      String s = "Message: Unknown Exception";
      throw new RuntimeException(s);

    }
}
Ungefähre Darstellung des Geschehens
public class ExceptionExample
{
    private static Exception exception = null;

   public static void main(String[] args)
    {
        System.out.println("main begin");


        System.out.println("main before call");

        method1();

        if (exception == null)
        {
            System.out.println("main after call");
        }
        else if (exception instanceof RuntimeException)
        {
            RuntimeException e = (RuntimeException) exception;
            exception = null;
            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();
        if (exception != null) return;
        System.out.println("method1 end");
    }

    public static void method2()
    {
        System.out.println("method2");
        String s = "Message: Unknown Exception";
        exception = 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 method2 erstellen wir bewusst eine Ausnahme und lösen diese aus (wir erzeugen einen Fehler).“

„Das Beispiel rechts zeigt, was passiert.“

„Sieh dir method2 an. Anstatt eine Ausnahme zu erstellen, erstellen wir ein RuntimeException-Objekt, speichern es in der statischen Variable exception und verlassen dann die Methode sofort mit einer return-Anweisung.“

„In method1 prüfen wir nach dem Aufruf von method2, ob eine Ausnahme aufgetreten ist. Wenn es eine Ausnahme gibt, dann wird method1 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 a 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.“