Cara kerja multi-tangkapan - 1

"Beberapa pelajaran lagi yang menarik. Oh, betapa aku senang mengajar!"

"Saya ingin memberi tahu Anda tentang cara kerja beberapa blok catch . Ini sangat sederhana: ketika pengecualian terjadi di blok try , eksekusi berpindah ke blok catch pertama ."

"Jika tipe yang ditunjukkan dalam tanda kurung dari blok catch cocok dengan tipe pengecualian yang dilempar, maka eksekusi dimulai di dalam blok itu. Jika tidak, kita pindah ke blok catch berikutnya , di mana pemeriksaan yang sama dilakukan."

"Jika kita kehabisan blok tangkap dan pengecualian belum tertangkap, itu akan dilempar kembali, dan metode saat ini akan berhenti secara tidak normal."

"Begitu. Blok tangkap yang bertepatan dengan tipe pengecualian akan dieksekusi."

"Ya benar. Namun, kenyataannya sedikit lebih rumit. Kelas dapat mewarisi kelas lain. Jika kelas Sapi mewarisi kelas Hewan, objek Sapi dapat direferensikan tidak hanya oleh variabel Sapi, tetapi juga oleh variabel Hewan. "

"Dan?"

"Karena semua pengecualian mewarisi Pengecualian atau RuntimeException (yang juga mewarisi Pengecualian ), mereka masih dapat ditangkap menggunakan 'catch ( Exception e)' atau ' catch (RuntimeException e) '."

"Dan?"

"Kita bisa membuat dua kesimpulan. Pertama, Anda bisa menggunakan 'catch (Exception e)' untuk menangkap pengecualian apa pun. Kedua, urutan catch block itu penting. "

"Ini beberapa contohnya:"

" ArithmeticExceptionYang terjadi setelah kita bagi dengan 0 akan ditangkap di blok tangkapan kedua."

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"Dalam contoh di bawah ini, ArithmeticExceptionakan ditangkap di blok tangkapan pertama, karena semua pengecualian mewarisi Pengecualian, yaitu Exceptionmencakup semua pengecualian. "

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"Dalam contoh di bawah, ArithmeticExceptiontidak akan tertangkap. Itu akan dilempar kembali ke metode pemanggilan."

Kode
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Itu sedikit memperjelas. Pengecualian ini bukanlah topik yang paling mudah."

"Sepertinya begitu. Mereka sebenarnya adalah salah satu benda paling sederhana di Jawa."

"Aku tidak tahu apakah harus senang atau sedih tentang itu …"