"Saya ingin memberitahu anda sedikit tentang cara pengecualian berfungsi. Contoh di bawah harus memberi anda gambaran kasar tentang perkara yang berlaku:"

Kod yang menggunakan pengecualian:
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);

    }
}
Perwakilan anggaran apa yang berlaku
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;
    }
}

"Saya benar-benar sesat."

"Baiklah. Biar saya terangkan apa yang berlaku."

"Dalam contoh di sebelah kiri, kami memanggil beberapa kaedah berturut-turut. Dalam method2, kami sengaja mencipta dan membuang pengecualian (kami mencipta ralat)."

"Contoh di sebelah kanan menunjukkan apa yang sedang berlaku."

"Lihat method2. Daripada mencipta pengecualian, kami mencipta RuntimeExceptionobjek, menyimpannya ke pembolehubah statik exception, dan kemudian segera keluar daripada kaedah menggunakan returnpernyataan."

"Dalam method1, selepas memanggil method2, kami menyemak sama ada terdapat pengecualian. Jika terdapat pengecualian, kemudian method1tamat sekali gus. Semakan seperti ini dilakukan secara tidak langsung selepas setiap panggilan kaedah (!) di Jawa."

"Wah!"

"Wah betul."

"Dalam lajur kanan, saya telah menggunakan kaedah utama untuk menunjukkan kira-kira apa yang berlaku apabila pengecualian ditangkap menggunakan binaan cuba-tangkap. Jika tiada pengecualian, maka semuanya terus berjalan seperti yang dijangkakan. Jika terdapat pengecualian dan ia adalah jenis yang sama yang dinyatakan dalam pernyataan tangkapan, kemudian kami mengendalikannya."

"Apa maksud throw dan instanceof maksudnya? "

"Lihat baris terakhir: throw new RuntimeException(s);. Beginilah cara anda mencipta dan membuang pengecualian. Kami tidak akan mengusahakannya lagi. Ia hanyalah satu contoh."

"Kami gunakan a instanceof Buntuk menyemak sama ada objek aadalah jenis B, iaitu sama ada objek yang dirujuk oleh pengecualian pembolehubah ialah RuntimeException. Ini ialah ungkapan boolean."

"Saya rasa saya dah dapat. Hampir."