"Saya ingin memberi tahu Anda sedikit tentang cara kerja pengecualian . Contoh di bawah ini akan memberi Anda gambaran kasar tentang apa yang terjadi:"

Kode 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);

    }
}
Perkiraan representasi dari apa yang terjadi
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;
    }
}

"Aku benar-benar tersesat."

"Baiklah. Biar kujelaskan apa yang terjadi."

"Dalam contoh di sebelah kiri, kami memanggil beberapa metode secara berurutan. Di method2, kami sengaja membuat dan melempar pengecualian (kami membuat kesalahan)."

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

"Lihat method2. Alih-alih membuat pengecualian, kami membuat objek RuntimeException, menyimpannya ke variabel statis exception, lalu segera keluar dari metode menggunakan returnpernyataan."

"Dalam method1, setelah memanggil method2, kami memeriksa apakah ada pengecualian. Jika ada pengecualian, maka method1diakhiri sekaligus. Pemeriksaan seperti ini dilakukan secara tidak langsung setelah setiap (!) pemanggilan metode di Jawa."

"Wow!"

"Wah benar."

"Di kolom kanan, saya telah menggunakan metode utama untuk menunjukkan kira-kira apa yang terjadi ketika pengecualian ditangkap menggunakan konstruksi try-catch. Jika tidak ada pengecualian, maka semuanya terus berjalan seperti yang diharapkan. Jika ada pengecualian dan itu adalah tipe yang sama yang ditentukan dalam pernyataan catch, lalu kami menanganinya."

"Apa maksud throw dan instanceof maksudnya? "

"Lihat baris terakhir: throw new RuntimeException(s);. Beginilah cara Anda membuat dan melontarkan pengecualian. Kami belum akan mengerjakannya. Itu hanya sebuah contoh."

"Kami menggunakan a instanceof Buntuk memeriksa apakah objek abertipe B, yaitu apakah objek yang direferensikan oleh pengecualian variabel adalah RuntimeException. Ini adalah ekspresi boolean."

"Kurasa aku mengerti. Hampir."