"Jeg vil gjerne fortelle deg litt om hvordan unntak fungerer. Eksempelet nedenfor bør gi deg en grov ide om hva som skjer:"

Kode som bruker unntak:
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);

    }
}
Omtrentlig representasjon av hva som skjer
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;
    }
}

"Jeg er helt fortapt."

"OK. La meg forklare hva som skjer."

"I eksempelet til venstre kaller vi noen få metoder etter hverandre. I method2, oppretter og kaster vi bevisst et unntak (vi lager en feil)."

"Eksemplet til høyre viser hva som skjer."

"Se på method2. I stedet for å lage et unntak, lager vi et RuntimeExceptionobjekt, lagrer det i den statiske variabelen exceptionog avslutter deretter metoden umiddelbart ved å bruke en returnsetning."

"I method1, etter å ha kalt method2, sjekker vi om det er et unntak. Hvis det er et unntak, method1avsluttes det med en gang. En slik sjekk utføres indirekte etter hvert (!) metodekall i Java."

"Wow!"

"Wow er rett."

"I den høyre kolonnen har jeg brukt hovedmetoden for å vise omtrent hva som skjer når et unntak fanges opp ved hjelp av en try-catch-konstruksjon. Hvis det ikke er noe unntak, fortsetter alt å kjøre som forventet. Hvis det er et unntak og det er den samme typen som er spesifisert i catch-erklæringen, så håndterer vi den."

"Hva gjør throw og instanceof mener? "

"Se på den siste linjen: throw new RuntimeException(s);. Dette er hvordan du oppretter og kaster et unntak. Vi vil ikke jobbe med det ennå. Det var bare et eksempel."

"Vi bruker a instanceof Bfor å sjekke om objektet aer av typen B, dvs. om objektet det refereres til av variabelunntaket er et RuntimeException. Dette er et boolsk uttrykk."

"Jeg tror jeg har fått det. Nesten."