Exception Handling
Exception Handling
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 yersebut sering dikenal denga
istilah throwing exception, sedangkan penerimaan exception yang bersangkutan dikenal
dengan istilah catch exception.
Eksepsi (exception) adalah suatu even, yang terjadi selama eksekusi program, yang
mengacaukan alrr normal instruksi program. Pada prinsipnya, eksepsi adalah suatu objek,
yang diturunkan dari kelas java.lang.Throwable. Dalam menangani suatu eksepsi, Java
menggunakan mekanisme penanganan eksepsi terstruktur.
Suatu program apabila mengalami kesalahan akan mengahasilkan suatu runtime errors seperti
gagal membuka file, suatu program melakukan akses diatas range array. Ketika runtime
errors tersebut terjadi, maka aplikasi akan membuat suatu exception.
Exception juga memiliki operasi-operasi exception. Adapun operasi exception dibagi menjadi
3 buah operasi yaitu:
Claiming an exception
Throwing an exception
Catching an exception
Ketika error terjadi di suatu method, maka method tersebut akan membuat object yang
kemudian dikirim ke runtime system. Object ini yang disebut sebagai exception objek,
mengandung informasi tentang error yang terjadi, termasuk tipe dan kondisi program pada
saat error terjadi. Proses pembuatan exception object dan kemudian mengirimnya ke runtime
system ini disebut sebagai throwing an exception (melemparkan exception) .
Setelah method melemparkan exception, runtime system akan berusaha untuk mencari solusi
untuk menangani masalah yang ada. Solusi yang ada bisa jadi lebih dari satu. Oleh karena itu,
runtime system akan memilih berdasarkan suatu urutan yang berdasar pada method tempat
terjadinya error dan atau method lain yang memanggil method tersebut. Urutan ini disebut
dengan calls stack, seperti yang ditampilkan pada Gambar 1.1
Method where error
Method call
Method without an
exception handler
main
Method call
Method call
Runtime system mencari method yang memiliki blok untuk terjadi berdasarlan call stack.
Pencarian dimulai dari tempat terjadinya error kemudian dirunut berdasarkan call stack
secara reverse order. Jika ditemukan blok untuk menangani error yang bersangkutan, maka
system akan menyerahkan exception ke handler.
Penyerahan exception ini disebut sebagai catch the exception (menangkap exception). Jika
system tidak menemukan handler yang sesuai di call stack, maka runtime system akan
menghentikan jalannya program, dapat dilihat pada gambar dibawah ini.
Method where error
Forwards exception
Method without an
exception handler
Looking
appropriate
handler
for
Looking
appropriate
handler
for
main
Untuk memahani bagaimana exception handlig bekerja di java, jadi kita harus memahami
kategori-kateogori exception, adapan kategori-kategori exception adalah, sebagai berikut:
Checked exceptions
Checked exceptions merupakan exception yang disebabkan oleh kesalahan pemakai
program atau hal lain yang dapat diprediksi oleh pemrograman.
Runtime exception
Runtime exception adalah exception yang muncul dimana kemunculannya tidak bisa
dihindari oleh pemrograman. Runtime exception biasanya disebabkan oleh kesalhan
program atau pada desain program.
Errors
Error sebenarnya bukan exception, namun merupakan masalah yang muncul diluar
kendali pemakai dan pemrogram. Error secara umum akan dibiarkan saja, sebab tidak
ada yang bisa dilakukan untuk mengatasinya. Misalnya, jika stack overflow muncul
maka error akan muncul. Adapun jenis-jenis error yaitu:
1. Syntax error
Syntax Error merupakan suatu kesalahan dari penulisan syntax pada program
sehingga syntax tersebu tidak dapat dieksekusi oleh program yang pasti
membuat program tersebut error.
2. Logical Error
Logical Error adalah sutau kesalahan yang disebabkan oleh si programmer
sendiri, hal ini disebabkan oleh kesalhan penulisan atau rumus yang
diterapkan oleh si programmer.
3. Runtime error
Error yang satu ini tergolong error yang unik, karena error ini akibat dari
kecerobohan seorang programmer itu sendiri. Error ini akan muncul apabila
terjadi miskomunikasi antara program dan difile yang dipanggil dalam
program.
Hierarki Exception
Semua kelas exception adalah seubclass dari java.langException. Kelas exception sendiri
merupakan kelas turunan dari kelas Throwable. Selain kelas exceptiom, ada juga kelas error
yang juga diturunkan dari kelas Throwable.
Normalnya, Error jarang dibuat objectnya pada Java. Kondisi ini bisa muncul jika adalah
masalah yang tidak dapat ditangani oleh program java. Misalnya, JVM kehabisan memori.
Untuk kasus ini program tidak akan dapat menangani error yang terjadi. Kelas exception
memiliki dua subclass utama yaitu IOException dan RuntimeException.
Object
Throwable
Error
IOException
di java.lang.object
Exception
ArithmeticExceptio
n
AWTException
Exception class
Exception class merupakan kesalahan yang disebabkan oleh program dan kesalahan
external. Kesalahan jenis ini dapat ditangkan dan diatasi oleh program. Exception
terdiri dari banyak subclass. Jenis error ini masih dapat dianti
Error class
Error class merupakan class yang berhubungan dengan kesalahan pada internal
system. Jika terjadi kesalahan jenis ini maka hanya dapat dilakukan bagaimana
memberitahu kepada pemakai dan melakukan pengakhiran program. Erro ini bersofat
fatal sehingga sistem tidak dapat dimanipulasi.
Throwable
Error
Exception
Menangani Exception
Kesalahan pada umumnya ditangani sewaktu program dikompilasi. Namun tidak semua
kesalahan dapat terdeteksi saat itu. Kesalahan yang lain seringkali terjadi sewaktu program
dijalankan. Kesalahan yang mungkin terjadi tentu saja bermacam-macam; misalnya, terjadi
pembagian suatu bilangan dengan nol hingga memori habis ketika diperlukan untuk
memberntuk objek.
Untuk mengatasi kesalahan sewaktu program dieksekusi, Java menyediakan penanganan
eksepsi (exception handling). Penanganan eksepsi pada Java dapat digunakan untuk hal-hal
berikut :
-
}
Pada bentuk diatas, bagian finally akan dijalankan, tidak tergantung apakah bagian blok try
mengalami eksepsi maupun tidak.
Menangkap Eksepsi
Method menangkap exception menggunakan kombinasi try dan catch keywords. Agar
kesalahan karena eksepsi dapat dikendalikan, eksepsi perlu ditangkap. Untuk keperluan
menangkap eksepsi, Java menyediakan pernyataan try. Kode program yang dapat
menimbulkan exception diletakkan di dalam blok try. Sintaks penggunaan try-catch adalah
sebagai berikut:
try
{
//Protected code
} catch (ExceptionName el)
{
//Blok Catch
}
Statement catch disertai dengan deklarasi tipe eksepsi yang ingin ditangani. Jika exception
terjadi di bagian protected code, maka blok catch akan melakukan pemeriksaan. Jika tipe
eksepsinya ada di dalam blok catch, maka eksepsi yang bersangkutan akan ditangani.
Catch secara bertingkat
Java menyediakan berbagai kelas yang berhubungan dengan eksepsi. Kelas tertinggi yang
telah Anda kenal yaitu Throwable. Berdasarkan kelas ini, terdapat subkelas dengan nama
Error dan Exception. Subkelas Error antara lain digunakan untuk menangani kesalahan
seperti memory habis (OutOfMemoryError) dan stack habis (StackOverflowError).
Kesalahan seperti ini biasanya tidak perlu ditangani; atau dengan kata lain program segera
diakhiri kalau menemukan eksepsi seperti ini.
Subkelas Exception antara lain memiliki subkelas RuntimeException, yang digunakan
untuk menangani kesalahan seperti indeks array yang tidak valid (indeks array melebihi
jumlah indeks, IndexArrayOutOfBounds) dan kesalahan Aritmetika (Arithmetic
Exception). Kesalahan yang tergolong dalam Exception perlu ditangani; misalnya kalau ada
pembagian bilangan dengan nol, program dapat diatur sehingga program tidak diakhiri (quit
program).
Object
Throwable
Error
Exception
........
IOException
ArithmeticExceptio
n
Dengan mengetahui berbagai kemungkinan jenis kesalahan, Anda bisa menangkap berbagai
kemungkinan eksepsi dengan menggunakan catch yang bertingkat. Bentuknya sebagai
berikut :
try{
//Blok yang akan ditangkap sekiranya terjadi eksepsi
}catch(RuntimeException r){
//Blok yang akan dijalankan kalau terjadi RuntimeError
}catch(Exception e){
kadang perlu dipastikan bahwa bagian program yang diberikan akan berjala, tidak peduli
eksepsi apa yang terjadi dan ditangkap. Kata kunci finally dapat digunakan untuk
menentukan bagian program seperti itu.
Dengan kata lain, keyword finally digunakan untuk membuat blok yang mengikuti blok try
Blok finally selalu dieksekusi, tidak peduli exception terjadi atau tidak. Menggunakan
keyword finally memungkinkan untuk menjalankan langkah akhir yang harus dijalankan
tidak peduli apa yangterjadi di bagian protected code.
Blok finally berada di bawah blok catch dan memiliki sintak sebagai berikut:
try
{
//Protected code
} catch (ExceptionType e1)
{
//Catch block
} catch (ExceptionType e2)
{
//Catch block
}catch (ExceptionType e3)
{
//Catch block
}finally
{
//The finally block always executes
Checked dan Unchecked Exceptions
Checked exceptions adalah exception yang diperiksa oleh Java compiler. Compiler
memeriksa keseluruhan program apakah menangkap atau mendaftar exception yang terjadi
dalam sintax throws. Apabila checked exception tidak didaftar ataupun ditangkap, maka
compiler error akan ditampilkan. Tidak seperti checked exceptions, unchecked exceptions
tidak berupa compile-time checking dalam penanganan exceptions. Pondasi dasar dari
unchecked exception classes adalah Error, RuntimeException dan subclass-nya. Di bawah ini
adalah tabel checked exception dan tabel uncheked exception.
Tabel 1.1 Checked Exception
No
1
2
Exception
ClassNotFoundException
CloneNotSupportedException
3
4
IllegalAccessException
InstantiationException
5
6
7
InterruptedException
NoSuchFieldException
NoSuchMethodException
Deskripsi
Kelas tidak ditemukan
Melakukan clone objek yang tidak
mengimplementasikan interface Cloneable
Pengaksesan ke kelas ditolak
Menciptakan objek dari kelas abstract
ataupun dari interface
Thread tela diinterupsi oleh thread lain
Field yang diminta tidak ada
Method yang diminta tidak ada
ArrayIndexOutBoundsException
ArrayStoreException
4
5
6
ClassCastException
IllegalArgumentException
IllegalMonitorStateException
IllegalStateException
IllegalThreadStateException
9
10
IndexOutOfBoundException
NegativeArraySizeException
11
NullPointerException
12
NumberFormatException
13
14
SecurityException
StringIndexOutOfBounds
Deskripsi
Kesalahan aritmatik seperti
pembagian dengan nol
Index array di luar batas
Pemberian nilai ke elemen
array tidak sesuai dengan
tipenya
Cast yang tidak sah
Argument illegal
Operasi
monitor
illegal
seperti menunggu di thread
yang tidak terkunci
Lingkungan atau aplikasi
state yang tidak benar
Operasi yang diminta tidak
kompatibel dengan state
thread saat itu
Indeks di luar batas
Array diciptakan dengan
ukuran negatif
Penggunaan null yang tidak
sah
Konversi yang tidak sah dari
string ke format numerik
Melanggar aturan security
Index di luar batas string
15
UnsupportedOperationException
Ditemukan operasi
tidak didukung.
yang