Anda di halaman 1dari 10

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

Method with 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

Catches some other exception

Method without an
exception handler

Looking
appropriate
handler

for

Looking
appropriate
handler

for

Method with an exception


handler

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

Kelas exception memiliki beberapa metode-metode. Metode public String getMessage()


mengembalikan detail informasi mengemai exception yang terjadi, informasi ini diinisialisasi
oleh konstruktor yang dimiliki Throwable. Metode public Throwable getCause()
menampilkan penyebab dari exception. Metode public String toString() mendapatkan nama
exception ditambah informasinya. Metode public void printStackTrace menampilkan hasil
toString()
beserta
stack
trace
System.err.
Metode
public
StackTraceElement[]getStackTrace() mengembalikan array yang berisi semua elemen di
stack trace, elemen ke 0 mewakili bagian atas call stack dan elemen akhir array mewakili
bagian akhir call stack. Metode public Throwable fillInStackTrace() mengisi stack trace
dari object Throwable dengan stack trace yang terdeteksi, menambah ke dalam stack trace.
Jenis-Jenis Exception
Dalam java, exception merupakan objek dari subkelas yang diturunkan dari kelas Throwable.
Kelas Throwable ini terdapat dalam package java.lang.object.

Berikut ini adalah jenis-jenis exception:

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 :
-

Menangani kesalahan dengan menuliskan kode penangan kesalahan yang terpisah


dengan kode yang akan ditangani. Sejumlah pernyataan dapat ditangani hanya dengan
menggunakan sebuah penangan eksepsi.
Menyediakan mekanisme yang memungkinkan untuk menjalankan kesalahan yang
terjadi dalam sebuah metode ke metode yang melakukan pemanggilan metode tersebut.
Menangani berbagai jenis kondisi yang tidak normal (jenis kesalahan dapat diketahui).

Dasar-Dasar Exception Handling (Penanganan Eksepsi)


Penanganan eksepsi pada java diatur dengan lima kata kunci: try, catch, throw, throws dan
finally. Pada dasarnya try digunakan untuk mengeksekusi suatu bagian program, dan jika
muncul kesalahan, sistem akan melakukan throw suatu eksepsi yang dapat menangkap
(catch) berdasarkan tipe eksepsi atau yang diberikan finally dengan penganan default.

Berikut ini bentuk dasar bagian penanganan eksepsi:


try{
//Block of Code
}
catch (Exception Type1 e){
//Exception Handler for Exception Type1
}
catch (Exception Type2 e){
//Exception Handler for Exception Type2
Throw(e);//re-throw the Exception...
}
finally{

}
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){

//Blok yang akan dijalankan kalau terjadi eksepsi Exception


}catch(Throwable t){
//Blok yang akan dijalankan kalau terjadi eksepsi yang lain
}
Throw
Java menyediakan pernyataan yang digunakan untuk melontarkan eksepsi, yaitu berupa
pernyataan throw. Pernyataan throw digunakan untuk secara eksplisit melemparkan suatu
eksepsi. Bentuk pernyataan ini :
throw variableObject;
Dalam hal ini variableObject menyatakan variable objek yang merujuk ke suatu kelas
eksepsi.
Mendapatkan penanganan dalam suatu instance throwable, melalui suatu parameter kedalam
bagian catch atau dengan membuatnya menggunakan operator new. Bentuk umum
pernyataan throw:
throw ThrowableInstance;
Aliran eksekusi akan segera terhenti setelah pernyataan throw, dan pernyataan selanjutnya
tidak akan dicapao. Blok try terdekat akan diperiksa untuk melihat jika telah memiliki bagian
catch yang cocok dengan tipe instace Throwable. Jika tidak ditemukan yang cocok, maka
pengaturan dipindahkan ke pernyataan tersebut. Jika tidak, maka blok pernyataan try
selanjutnya diperiksa, begitu seterusnya sampai penanganan eksepsi terluar menghentikan
program dan mencetak penelusuran semua tumpukan sampai pernyataan throw.
Throws
Kata kunci throws digunakan untuk mengenali daftar eksepsi yang mungkin di throw oleh
suatu method. Jika tipe eksepsinya adalah error atau RuntimeException atau suatu
subclassnya, aturan ini tidak berlaku karena tidak diharapkan sebagai bagian normal dari
kerja program.
Jika suatu method secara eksplisit men-throws suatu intans dari Exception atau subclassnya,
diluar RuntimeException, harus mendeklarasikan tipenya dengan pernyataan throws. Ini
mendefinisikan ulang deklarasi method sebelumnya dengan sintaks sebagai berikut:
Type method-name(arg-list) throws exception-lisy{}
Finally
Suatu eksepsi dilemparkan, alur program dalam suatu method membuat jalur yang cenderung
tidak linier melalui method tersebut, melompati baris-baris tertentu bahkan mungkin akan
keluar sebelum waktunya pada kasus dimana tidak ada bagian catch yangcocok. Kadang-

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

Tabel 1.2 Uncheked Exception


No
Exception
1 ArithmaticException
2
3

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

Keuntungan Menggunakan Exception


Adapun keuntungan menggunakan exception, yaitu sebagai berikut:
1. Memisahkan Kode Error-Handling dari kode utama
Dengan fasilitas pemisahan kode utama dan kode erro handling, memungkinkan
bagian kita untuk berkonsentrasi terhadap bagian-bagian tersebut. Di pemrograman
tradisional, deteksi error, reporting dan penanganan error menimbulkan kompleksitas
program semakin tinggi.
2. Propagasi errors berdasarkan Call Stack
Keuntungan kedua exception adalah adanya mekanisme propagasi laporan error
melalui method-method di call stack.
3. Pengelompokkan dan Pembedaan Tipe Error
Karena semua exception yang dilempar adalah object, pengelompokkan dan
kategorisasi exception dapat dilakukan menurut hierarki class.

Anda mungkin juga menyukai