1. throwoperator

Ketika sebuah pengecualian ditangkap oleh sebuah catchblok, dan sampai ia dilemparkan ke mesin Java, itu hanyalah sebuah objek yang mewarisi Exception(atau lebih tepatnya, Throwable). Objek pengecualian itu sendiri tidak memiliki sifat magis.

Semua logika tentang cara kerja pengecualian hanyalah cara khusus perilaku mesin Java saat pengecualian dilemparkan ke sana.

Anda selalu dapat mengembalikan pengecualian yang tertangkap ke mesin Java. Untuk melakukan ini, Anda perlu menggunakan throwoperator:

throw exception;

Contoh:

Kode Keluaran konsol
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Dalam kode ini, kami menangkap pengecualian, menampilkan pesan tentangnya di layar, lalu menampilkannya kembali.

Pengecualian yang dilemparkan kembali tidak dapat ditangkap oleh catchblok lain di tryblok yang sama.


2. Pengecualian Anda

Ngomong-ngomong, Anda bisa membuat objek pengecualian sendiri: itu hanya objek yang bertipe Exceptionatau kelas yang mewarisinya. Dan membuangnya.

Ini lebih mudah daripada kedengarannya. Contoh:

Kode Keluaran konsol
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

Pada contoh di atas, kita membuat objek exception baru yang bertipe is RuntimeExceptiondan langsung membuangnya menggunakan throwoperator.

Itu akan segera ditangkap oleh catchblok, karena RuntimeException mewarisi Exception. Kode catch (Exception except)menangkap objek pengecualian dari semua kelas yang mewarisi Exceptionkelas.



3. finallykata kunci

Poin penting lainnya. Terkadang seorang programmer perlu melakukan beberapa tindakan terlepas dari apakah pengecualian terjadi dalam kode. Misalnya, kita membuka file untuk menulis. File yang dibuka harus ditutup dengan memanggil close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

Untuk melakukan tindakan wajib ini, jenis blok lain ( finally) ditambahkan ke try-catchkonstruk, sehingga membuat try-catch-finallykonstruk. Ini terlihat seperti ini:

Contoh:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

Kode di finallyblok akan dieksekusi dalam hal apa pun, terlepas dari apakah ada pengecualian. Bahkan jika pengecualian dilemparkan dan tidak tertangkap, finallyblok tersebut akan tetap dieksekusi.

By the way, jika Anda tidak ingin menangkap pengecualian, tetapi Anda membutuhkan blok finally, gunakan notasi steno untuk try-catch-finallykonstruk: try-finallyblok. Ini terlihat seperti ini:

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}