Exception Handling

14
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

description

aassdfg

Transcript of Exception Handling

Page 1: 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 call

Method call

Method call

Method where error occurred

Method without an exception handler

Method with an exception handler

main

Page 2: Exception Handling

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.

Looking for appropriate handler

Forwards exception

Looking for appropriate handler

Catches some other exception

Untuk memahani bagaimana exception handlig bekerja di java, jadi kita harus memahami kategori-kateogori exception, adapan kategori-kategori exception adalah, sebagai berikut:

Checked exceptionsChecked exceptions merupakan exception yang disebabkan oleh kesalahan pemakai program atau hal lain yang dapat diprediksi oleh pemrograman.

Runtime exceptionRuntime exception adalah exception yang muncul dimana kemunculannya tidak bisa dihindari oleh pemrograman. Runtime exception biasanya disebabkan oleh kesalhan program atau pada desain program.

ErrorsError 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 errorSyntax 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

Method where error occurred

Method without an exception handler

Method with an exception handler

main

Page 3: Exception Handling

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 errorError 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.

di java.lang.object

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.

Object

Throwable

Error Exception

IOException ArithmeticException AWTException

Page 4: Exception Handling

Jenis-Jenis ExceptionDalam 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 classException 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 classError 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.

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).

Throwable

Error Exception

Page 5: Exception Handling

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

Page 6: Exception Handling

} 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 ArithmeticException

Page 7: Exception Handling

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.

Page 8: Exception Handling

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

Page 9: Exception Handling

{

//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 Exception Deskripsi1 ClassNotFoundException Kelas tidak ditemukan2 CloneNotSupportedException Melakukan clone objek yang tidak

mengimplementasikan interface Cloneable3 IllegalAccessException Pengaksesan ke kelas ditolak4 InstantiationException Menciptakan objek dari kelas abstract

ataupun dari interface5 InterruptedException Thread tela diinterupsi oleh thread lain6 NoSuchFieldException Field yang diminta tidak ada7 NoSuchMethodException Method yang diminta tidak ada

Tabel 1.2 Uncheked Exception

No Exception Deskripsi1 ArithmaticException Kesalahan aritmatik seperti

pembagian dengan nol2 ArrayIndexOutBoundsException Index array di luar batas3 ArrayStoreException Pemberian nilai ke elemen

array tidak sesuai dengan tipenya

4 ClassCastException Cast yang tidak sah5 IllegalArgumentException Argument illegal6 IllegalMonitorStateException Operasi monitor illegal

seperti menunggu di thread yang tidak terkunci

7 IllegalStateException Lingkungan atau aplikasi state yang tidak benar

8 IllegalThreadStateException Operasi yang diminta tidak kompatibel dengan state thread saat itu

Page 10: Exception Handling

9 IndexOutOfBoundException Indeks di luar batas10 NegativeArraySizeException Array diciptakan dengan

ukuran negatif11 NullPointerException Penggunaan null yang tidak

sah12 NumberFormatException Konversi yang tidak sah dari

string ke format numerik13 SecurityException Melanggar aturan security14 StringIndexOutOfBounds Index di luar batas string15 UnsupportedOperationException Ditemukan operasi yang

tidak didukung.

Keuntungan Menggunakan Exception

Adapun keuntungan menggunakan exception, yaitu sebagai berikut:

1. Memisahkan Kode Error-Handling dari kode utamaDengan 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 StackKeuntungan kedua exception adalah adanya mekanisme propagasi laporan error melalui method-method di call stack.

3. Pengelompokkan dan Pembedaan Tipe ErrorKarena semua exception yang dilempar adalah object, pengelompokkan dan kategorisasi exception dapat dilakukan menurut hierarki class.