CodeGym /Kurs /Java-syntaks /Hvordan unntak fungerer

Hvordan unntak fungerer

Java-syntaks
Nivå , Lekse
Tilgjengelig

"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."

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION