"Jeg vil gerne fortælle dig lidt om, hvordan undtagelser fungerer. Eksemplet nedenfor burde give dig en nogenlunde idé om, hvad der sker:"

Kode, der bruger undtagelser:
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);

    }
}
Tilnærmet repræsentation af, hvad der sker
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 lost."

"Okay. Lad mig forklare, hvad der foregår."

"I eksemplet til venstre kalder vi nogle få metoder efter hinanden. I method2, opretter og kaster vi bevidst en undtagelse (vi opretter en fejl)."

"Eksemplet til højre viser, hvad der sker."

"Se på method2. I stedet for at oprette en undtagelse opretter vi et RuntimeExceptionobjekt, gemmer det i den statiske variabel exceptionog afslutter derefter metoden med det samme ved hjælp af en returnsætning."

"I method1, efter opkald method2kontrollerer vi, om der er en undtagelse. Hvis der er en undtagelse, method1afsluttes med det samme. En kontrol som denne udføres indirekte efter hvert (!) metodekald i Java."

"Wow!"

"Wow er rigtigt."

"I højre kolonne har jeg brugt hovedmetoden til at vise omtrent, hvad der sker, når en undtagelse fanges ved hjælp af en try-catch-konstruktion. Hvis der ikke er nogen undtagelse, fortsætter alt med at køre som forventet. Hvis der er en undtagelse, og det er den samme type angivet i catch-opgørelsen, så håndterer vi det."

"Hvad gør throw og instanceof mener? "

"Se på den sidste linje: throw new RuntimeException(s);. Sådan opretter og kaster du en undtagelse. Det vil vi ikke arbejde på endnu. Det var bare et eksempel."

"Vi bruger a instanceof Btil at kontrollere, om objektet aer af typen B, dvs. om objektet, der refereres til af variablen undtagelse, er en RuntimeException. Dette er et boolesk udtryk."

"Jeg tror, ​​jeg fik det. Næsten."