"Ik wil je wat vertellen over hoe uitzonderingen werken. Het onderstaande voorbeeld zou je een globaal idee moeten geven van wat er gebeurt:"

Code die uitzonderingen gebruikt:
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);

    }
}
Geschatte weergave van wat er gebeurt
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;
    }
}

"Ik ben helemaal verloren."

'Oké. Laat me uitleggen wat er aan de hand is.'

"In het voorbeeld aan de linkerkant roepen we achtereenvolgens een paar methoden aan. In method2maken we opzettelijk een uitzondering (we creëren een fout)."

"Het voorbeeld rechts laat zien wat er gebeurt."

"Kijk naar method2. In plaats van een uitzondering te maken, maken we een RuntimeExceptionobject, slaan het op in de statische variabele exceptionen verlaten de methode onmiddellijk met een returninstructie."

"In method1, na het aanroepen method2controleren we of er een uitzondering is. Als er een uitzondering is, dan method1stopt het meteen. Een dergelijke controle wordt indirect uitgevoerd na elke (!) methodeaanroep in Java."

"Wauw!"

"Wauw klopt."

"In de rechterkolom heb ik de hoofdmethode gebruikt om ongeveer te laten zien wat er gebeurt als een uitzondering wordt opgevangen met behulp van een try-catch-constructie. Als er geen uitzondering is, blijft alles draaien zoals verwacht. Als er een uitzondering is en het hetzelfde type is als gespecificeerd in de catch-instructie, dan behandelen we het."

"Wat doen throw en instanceof betekenen? "

"Kijk naar de laatste regel: throw new RuntimeException(s);. Zo maak en gooi je een uitzondering. Daar gaan we nog niet aan werken. Het was maar een voorbeeld."

"We gebruiken a instanceof Bom te controleren of het object avan het type is B, dwz of het object waarnaar wordt verwezen door de variabele uitzondering een RuntimeException is. Dit is een booleaanse uitdrukking."

'Ik denk dat ik het snap. Bijna.'