Wednesday, April 25, 2012

Exception Handling pada Java


Exception Handling
Exception adalah event yang terjadi ketika program menemui kesalahan pada saat instruksi program dijalankan. Banyak hal yang dapat menimbulkan event ini, misalnya crash, harddisk rusak dengan tiba-tiba, sehingga program-program tidak bisa mengakses file-file tertentu. Programmer pun dapat menimbulkan event ini, misalnya dengan melakukan pembagian dengan bilangan nol, atau pengisian elemen array melebihi jumlah elemen array yang dialokasikan dan sebagainya. Exception terdiri dari dua macam kelompok, yaitu : a) Exception yang merupakan subclass RunTimeException; b) Exception yang bukan subclass RunTimeException.
RunTimeException biasanya disebabkan oleh kesalahan program atau pada desain program. Misalnya NullPointerException yang disebabkan oleh proses inisialisasi program yang tidak sempurna dan ArrayIndexOutOfBoundsException yang disebabkan akses array yang melebihi kapasitas array yang ada.
Dalam bahasa Java, ketika terjadi kesalahan, otomatis akan dilemparkan sebuah objek yang disebut exception, yang kemudian dapat diproses lebih lanjut oleh fungsi-fungsi yang siap menangani kesalahan tersebut. Proses pelemparan exception tersebut sering dikenal dengan istilah throwing exception, sedangkan proses penerimaan exception yang bersangkutan dikenal dengan istilah catch exception. Terdapat beberapa subkelas yang diturunkan dari kelas exception, yaitu :
• ClassNotFoundException
Terjadi bila ingin menggunakan kelas yang tidak ada atau belum dibuat.
• CloneNotSupportedException
Terjadi bila ingin meng-clone atau menggandakan suatu kelas yang tidak didukung oleh method clone
• RuntimeException
• NullPointerException
• ArrayIndexOutOfBoundsException
• ArithmeticException
• Khusus untuk operasi aritmatika integer. Seperti pembagian suatu bilangan integer dengan 0
• IOException
Terjadi bila ada I/O error, seperti gagal menemukan dan membuka file. User memasukkan input yang tidak valid. Subkelas ini memiliki beberapa subkelas lain, seperti InterruptedIOException, EOFException, serta FileNotFoundException.
Error dan Exception Classes
Seluruh exceptions adalah subclasses, baik secara langsung maupun tidak langsung, dari sebuah root class Throwable. Kemudian, dalam class ini terdapat dua kategori umum : Error class dan Exception class.
Exception class menunjukkan kondisi yang dapat diterima oleh user program. Umumnya hal tersebut disebabkan oleh beberapa kesalahan pada kode program. Contoh dari exceptions adalah pembagian oleh 0 dan error di luar jangkauan array.
Error class digunakan oleh Java run-time untuk menangani error yang muncul pada saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya disebabkan oleh run-time environment. Sebagai contoh adalah out of memory dan harddisk crash.
Keyword penting pada exception handling
Ada 5 keyword penting dalam java dalam hal exception handling : a) try. Keyword ini biasanya digunakan dalam suatu block program. Keyword ini digunakan untuk mencoba menjalankan block program kemudian mengenai dimana munculnya kesalahan yang ingin diproses. Keyword ini juga harus dipasangkan dengan keyword catch atau keyword finally. b) catch. Jika kita sudah melihat penjelasan try maka secara tidak langsung kita sudah memahami kegunaan dari keyword ini. Dalam java, keyword catch harus dipasangkan dengan try. Kegunaan keyword ini adalah menangkap kesalahan atau bug yang terjadi dalam block try. Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer. Keyword catch juga dapat diletakan berulang-ulang sesuai dengan kebutuhan. c) Finally. Keyword ini merupakan keyword yang menunjukan bahwa block program tersebut akan selalu dieksekusi meskipun adanya kesalahan yang muncul atau pun tidak ada. d) throw. Keyword ini digunakan untuk melemparkan suatu bug yang dibuat secara manual. e) throws. Keyword throws digunakan dalam suatu method atau kelas yang mungkin menghasilkan suatu kesalahan sehingga perlu ditangkap errornya. Cara mendefinisikannya dalam method adalah sebagai berikut : type method-name throws exception-list1, exceptio-list2, … {}.
Mekanisme Mengantisipasi Exceptiom
Berikut adalah kemungkinan skenario exception :
1. Tidak terjadi exception
Program dijalankan, seluruh statement dalam blok try telah dieksekusi dan tidak terjadi exception sama sekali, maka blok catch tidak akan dieksekusi oleh interpreter.
2. Terjadi exception pada blok method tunggal
Blok method tunggal disini adalah bila method itu tidak memanggil statement dari method yang lain. Bila saat interpreter mengeksekusi block try ada statement yang menyebabkan excepation, maka interpreter akan langsung keluar dari blok try, kemudian mencari blok catch yang bersesuaian dengan exception yang terjadi. Jika interpreter menemukan catch yang sesuai maka interpreter akan mengeksekusi blok tersebut. Bila tidak ada catch yang sesuai, maka interpreter akan menghentikan program dan menampilkan pesan exception yang terjadi.
3. Terjadi exception pada blok method tersarang
Blok method tersarang maksudnya adalah method yang mendeklarasikan exception (misal method A) memanggil method lainya ( method B ). Method A memanggil Method B. Pada saat interpreter mengeksekusi statement dari method B ini, terjadi exception. Interpreter akan menghentikan eksekusi statement, selanjutnya mencari catch yang sesuai dalam method B. Bila catch ini tidak ditemukan ( dalam method B ), maka interpreter akan pergi ke meyhod A. Bila di temukan, maka interpreter akan mengeksekusi blok tersebut, namun bila tidak ada catch yang sesuai, interpreter akan menghentikan program dan menampilkan pesan exception.
Jenis Exception Handling
1. Try – Catch
Untuk penanganan exception, dalam Java digunakan blok try dan catch. Blok try digunakan untuk menempatkan kode-kode program Java yang mengandung kode program yang mungkin melemparkan exception. Blok catch digunakan untuk menempatkan kode-kode program Java yang digunakan untuk menangani sebuah exception tertentu. Setelah kita tambahkan blok try – catch untuk mengatasi error yang terjadi, maka program akan menampilkan pesan error bahwa ada error yang terjadi pada konsol. Sintaks blok try – catch adalah sebagai berikut :
Try
{
… kode program yang mungkin menghasilkan exception
}
Catch
{exception xx}{…}
Catch
{exception xx}{…}
Petunjuk Penulisan Program :
Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait.
Penulisan kode dalam blok mengikuti identasi.
2. Multiple Catch
Untuk multiple catch akan kita gunakan jika blok try mungkin menimbulkan lebih dari satu exception. Sintaks blok multiple catch adalah sebagai berikut :
try
{
instruksi-1
instruksi-2
instruksi-3
……… diabaikan
instruksi-n
}
catch(tipe_eksepsi_1 e1)
{
}
catch(tipe_eksepsi_2 e2)
{
}
catch(tipe_eksepsi_3 e3)
{
}
….
catch(tipe_eksepsi_n en)
{
}
instruksi-lain
…….
3. Try – Catch – Finally
Selain try – catch, kita dapat mendefinisikan blok try – catch dan finally yang memiliki proses yang lebih lengkap, karena pada finally kita dapat mendefinisikan kode program yang selalu dieksekusi, baik ada exception yang terjadi maupun bila tidak terjadi exception sama sekali. Bentuk umum dari blok try-catch-finally adalah sebagai berikut :
Try
{
//tulis pernyataan yang dapat mengakibatkan exception
//dalam blok ini
}
catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
. . .
catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
Finally
{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
• Notasi blok bersifat perintah
• Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
• Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
• Blok try harus diikuti oleh paling sedikit satu blok catch atau satu blok finally, atau keduanya.
• Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari subclassesnya.
• Try-catch yang menggunakan finally maka keyword finally tersebut fungsinya hampir sama dengan keyword default pada switch-case.
Ada 3 sekenario pemrosesan dengan keyword finally yaitu :
• Bila tidak terjadi exception,maka blok finally akan di eksekusi . setelah selesai, interpreter akan mengeksekusi statement selanjutnya.
• Bila terjadi exception, interpreter akan berhenti mengeksekusi statement dalam blok try berikutnya. Kemudian, interpreter akan mencari catch yang sesuai. Bila ditemukan, interpreter akan mengeksekusi catch dan finally.
• Bila exception terjadi, namun tidak ada catch yang sesuai, maka statement – statemenet try berikutnya yang masih tersisa tidak akan di eksekusi. Selanjutnya, interpreter akan mengeksekusi blok finally.

0 comments:

Post a Comment