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.
Sunday, 10 January 2016 at 20:51:00 GMT-8
Thanks materinya sangat membantu