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 komentar:
Posting Komentar