Oleh : Reza Ervani
Rujukan :
بسم الله الرحمن الرحيم
Kita menghubungkan exception handler dengan blok try
dengan menyediakan satu atau lebih blok catch
secara langsung setelah blok try
. Tidak boleh ada kode antara akhir blok try
block dan awal blok catch
– tampak seperti berikut ini :
try { } catch (ExceptionType name) { } catch (ExceptionType name) { }
Setiap blok catch
adalah exception handler dan menangani tipe eksepsi yang diindikasikan oleh argumennya. Tipe argumen, ExceptionType
, mendeklarasikan tipe eksepsi yang dapat ditangani handler dan mestilah nama dari sebuah class yang merupakan turunan dari class Throwable
. Handler dapat merujuk ke eksepsi dengan name
.
Blok catch
berisi kode yang dieksekusi jika exception handler dibangkitkan. Sistem runtime membangkitkan exception handler bila handler adalah yang pertama kali ada di dalam call stack dimana ExceptionType
cocok dengan tipe exception yang diberikan. Sistem menganggap cocok jika objek yang diberikan dapat secara legal diberikan ke argumen exception handler.
Berikut adalah dua exceptipn handler untuk metode writeList
— satu untuk dua tipe exception terperiksa yang dapat diberikan didalam statement try
:
try { } catch (FileNotFoundException e) { System.err.println("FileNotFoundException: " + e.getMessage()); throw new SampleException(e); } catch (IOException e) { System.err.println("Caught IOException: " + e.getMessage()); }
Kedua handler tersebut mengeluarkan pesan kesalahan. Handler kedua tidak melakukan apa-apa lagi. Dengan menangkap setiap IOException
yang tidak ditangkap oleh handler pertama, dia memperkenankan program untuk tetap dieksekusi.
Handler pertama, sebagai tambahan untuk mengeluarkan pesan, memberikan suatu user-defined exception. (Memberikan eksepsi dibahas lebih lanjut dalam bagian “Bagaimana Memberikan Eksepsi”)
Dalam contoh tersebut, ketika FileNotFoundException
diterima menyebabkan sebuah user-defined exception yang disebut SampleException
diberikan. Kita mungkin ingin melakukan hal ini jka kita ingin program kita untuk menangani sebuah eksepsi dengan cara yang khusus.
Exception handler dapat melakukan lebih dari sekedar menampilkan pesan kesalahan atau menghentikan program. Mereka dapat melakukan perbaikan kesalahan, memberikan prompt kepada pengguna untuk memberikan keputusan atau meneruskan error ke handler yang lebih tinggi menggunakan chained exception, yang akan dibahas nanti dalam bagian Chained Exception
Menangkap Lebih dari Satu Tipe Exception dengan Satu Exception Handler
Pada Java SE 7 dan berikutnya, sebuah blok catch
dapat menangani lebih dari satu tipe eksepsi. Fitur ini dapat mengurangi duplikasi kode dan kecenderungan membuat eksepsi menjadi lebih luas.
Pada klausa catch
spesifikasikan tipe-tipe eksepsi yang dapat ditangani oleh blok, dan pisahkan tiap eksepsi dengan suatu garis vertikal (|
):
catch (IOException|SQLException ex) { logger.log(ex); throw ex; }
Catatan : Jika sebuah blok catch
menangani lebih dari satu tipe eksepsi, maka kemudian parameter catch
secara implist adalah final
. Pada contoh ini parameter catch
yakni ex
adalah final
sehingga kita tidak dapat menambahkan nilai apapun didalam blok catch.
Leave a Reply