Menangkap Kesalahan (Error Handling) Untuk membuat penangkap kesalahan (error handler), Java menyediakan Class Exception. dengan adanya Exception ini, kesalahan tidak akan menyebabkan program keluar dari tugas, dan pesan kesalahan yang biasanya muncul, tidak akan dimunculkan, atau dimunculkan namun dengan modifkasi tertentu. Contoh : class TryAndCatch { public static void main (String untag[]) { int Angka = 20; int Hasil ; Hasil = 20/0; System.out.println(Hasil); } }
Perhatikan gambar diatas, terdapat pesan kesalahan java.lang.arithmaticException : / by zero Apabila program diatas dimodifikasi menjadi sbb : class TryAndCatch { public static void main (String untag[]) { int Angka = 20; int Hasil ; try { Hasil = 20/0; System.out.println(Hasil); } catch(java.lang.ArithmeticException ex) { System.out.println("Maaf pembaginya adalah nol"); } } }
Pesan kesalahan java.lang.arithmaticException : / by zero, diganti menjadi “Maaf Pembaginya adalah nol” Contoh 2 : class TryAndCatch { public static void main (String untag[]) { int a[] = {1,2,3}; int Angka = 20; try { for(int i=0; i<3;i++) { System.out.println(a[5]); } } catch(java.lang.ArithmeticException ex) { System.out.println("Maaf pembaginya adalah nol"); } catch(java.lang.ArrayIndexOutOfBoundsException ex) { System.out.println("Maaf index anda telalu besar"); } } }
Hasilnya :
Syntax Try and Catch secara Umum : try { statement_berhasil; } catch ( class_exception variabel_penampung) { statement_gagal; } Atau try { statement_berhasil; } catch ( class_exception1 variabel_penampung1) { statement_gagal1; } …… catch ( class_exceptionN variabel_penampungN) { statement_gagalN; } Atau try { statement_berhasil; } catch ( class_exception1 variabel_penampung1) { statement_gagal1; } …… catch ( class_exceptionN variabel_penampungN) { statement_gagalN; }catch(Throwable t) { statement_throw; } statement_berhasil adalah statement yang diharapkan akan dikerjakan selama program berlangsung statement_gagal adalah statement pengganti bila statement_berhasil (statement yang ada pada blok try) gagal dilaksanakan. class_exception adalah nama class exception penampung kesalahan catching class_exception bisa terdiri dari satu class, namun bisa juga lebih dari satu class, sehingga lebih mendetail. catching class Throwable digunakan apabila exception tidak didaftarkan pada class_exception1 s/d class_exceptionN. Jika dibandingkan dengan struktur kontrol IF..ELSE IF….ELSE, maka Throwable adalah blok ELSE nya.
DAFTAR PESAN KESALAHAN PADA JAVA java.lang.ArithmeticException Dikerjakan ketika terjadi kesalahan arithmatic cth : pembagian oleh nol atau divide by Zero java.lang.ArrayIndexOutOfBoundsException dikerjakan ketika array diindaksikan negatif atau melebihi indeks yang tersedia java.lang.ArrayStoreException mengindikasikan usaha yang dibuat untuk menyimpan tipe data dari objek pada array objek gagal. Contoh : Object x[] = new String [3] x[0] = new Integer(0) java.lang.ClassCastException mengindakasikan kode yang digunakan untuk mengCast (mengubah tipe data) objek pada suatu sub class tapi bukan dari suatu instance Contoh: Object x[] = new Integer(0); System.out.println((String) x); java.lang.ClassNotFoundException dikerjakan apabila aplikasi gagal sewaktu mencoba untuk meload class dg cara sbb: menggunakan forName dari class Class menggunakan findSystem dari class classLoader menggunakan loadClass dari class classLoader java.lang.CloneNotSupportedException mengindikasikan clone method pada class objek dipanggil untuk mengklone objek, tetapi class objek tersebut tidak mengimplement clonable interface java.lang.Exception berdasar dari form Throwable yang mengindikasikan kondisi aplikasi yang dimungkinkan untuk di Catch java.lang.ExceptionInInitializerError Mengindikasikan terjadinya kesalahan sewaktu menginisialisasi (memberikan nilai awal) pada variable statis java.lang.IllegalAccessException Mengindikasikan terjadinya kesalahan sewaktu menInstancekan suatu class, meng-Set atau meng-Get suatu Field/Variable , atuapun memanggil suatu prosedur atau kocstruktor, karena hak akses yang tidak terpenuhi/mencukupi.
java.lang.IllegalArgumentException Mengindikasikan terjadinya kesalahan sewaktu pembuatan/pemanggilan method (baik proseur/fungsi) karena adanya argumen/parameter yang tidak tepat (berupa kelebihan atupun kekurangan parameter, ataupun tipe datanya tidak sama) java.lang.IllegalMonitorStateException Mengindikasikan terjadinya kesalahan sewaktu thread berusaha menunggu monitor dari suatu Objek, padahal thread tersebut tidak mempunyai/memiliki hak monitor tsb. java.lang.IllegalStateException Mengindikasikan terjadinya kesalahan sewaktu pemanggilan Method. Artinya Method tsb dipanggil pada saat yang tidak tepat, atau dengan kata lain Java atau Aplikasi berbasis java tsb, tidak berada pada saat yang tepat saat pemanggilan method tsb dilakukan. java.lang.IllegalThreadStateException Mengindikasikan terjadinya kesalahan sewaktu pemanggilan Thread. Artinya Thread tsb dipanggil pada saat yang tidak tepat, atau dengan kata lain Java atau Aplikasi berbasis java tsb. Belum berada pada saat yang tepat saat pemanggilan Thread tsb. dilakukan. java.lang.IndexOutOfBoundsException Mengindikasikan terjadinya kesalahan index dari string, array atau vektor yang melebihi dari seharusnya. java.lang.InstantiationException Mengindikasikan terjadinya kesalahan sewaktu aplikasi bersaha mengCreate suatu instance melalui method newInstance dari class, padahal objek yang akan diCreate berupa interface ataupun abstract. java.lang.InterruptedException Mengindikasikan terjadinya kesalahan sewaktu suatu Thread dalam posisi sleep, waiting atapun pause untuk beberapa saat, sementara thread lain berusaha meng-Interrupt thread tsb. java.lang.NegativeArraySizeException Mengindikasikan terjadinya kesalahan sewaktu aplikasi hendak membuat array dengan ukuran negatif, seharusnya ukuran array adalah positif. java.lang.NoSuchMethodException Mengindikasikan terjadinya kesalahan sewaktu aplikasi hendak memanggil Method (baik prosedur atapun fngsi) yang tidak ada./ belum dibuat. java.lang.NoSuchFieldException Mengindikasikan terjadinya kesalahan sewaktu aplikasi hendak menggunakan suatu field atau variabel yang tidak ada / belum dibuat
java.lang.NullPointerException Mengindikasikan terjadinya kesalahan sewaktu aplikasi menggunakan null pada saat suatu object sedang dibutuhkan. Yang termasuk kesalahan ini adalah : Memanggil method dari suatu object yang null Menggunakan variabel dari suatu object yang null Menggunakan array yang null, serta memakaik/memodifkasi array yang ke-null Meng Throw null, pada saat Throwable mempunyai suatu nilai java.lang.NumberFormatException Mengindikasikan terjadinya kesalahan sewaktu perubahan tipe data string ke tipe data numerik, padahal tidak ada format numerik untuk string tersebut. Contoh : “123” dapat diubah menjadi suatu numerik (int, double, float dst) “12AB”. Tidak dapat diubah menjadi suatu numerik (int, double, float dst) java.lang.RuntimeException RuntimeException adalah superclass dari Exception yang dapat diThrow selama terjadi operasi normal pada Java Virtual Machine java.lang.SecurityException diThrow oleh Security Manager, yang mengindikasikan kurangnya hak akses sekuriti java.lang.StringIndexOutOfBoundsException diThrow oleh method (prosedur/fungsi) bernilai string, yang mengindikasikan bahwa index String adalah negatif, atau index string lebih besar dari yang seharusnya. java.lang.UnsupportedOperationException Mengindikasikan terjadinya kesalahan, karena operasi yang diminta tidak disupport.
Finally Digunakan sebagai tugas final, atau mewajibkan program mengerjakan suatu tugas setelah apapun yang terjadi pada blok try, baik berhasil maupun gagal. Contoh : setelah membuka suatu file untuk dioperasikan, resource memory untuk file tersebut harus dibebaskan, agar memory tidak perlu mengingat variabel-variabel file tersebut. contohFileClass f = new contohFileClass(); if (f.open("/c:/file/name/path")) { try { ExceptionYangMungkinTerjadi (); } finally { f.close(); } } catching finally bisa berlaku seperti contoh dibawah ini : contohFileClass f = new contohFileClass(); if (f.open("/c:/file/name/path")) { try { ExceptionYangMungkinTerjadi (); } catch (Throwable t) { f.close(); throw t; } }
finally juga dikerjakan tidak hanya setelah Exception , tetapi juga setelah statement retrun , break dan contonue statement (yang biasanya terjadi di while atau do-while) public class finalExceptionku { public static void main(String untag[]) { int bilangan; bilangan = 2; // cobalah mengubah2 nilai bilangan ini System.out.print("Sebelum pembagian "); while (true) { System.out.print("saksikan perjalannnya "); try { System.out.println("sebelum masuk 1 "); if (bilangan == 1) return; System.out.println("sebelum masuk 2 "); if (bilangan == 2) break; System.out.println("sebelum masuk 3 "); if (bilangan == 3) continue; System.out.println("sebelum masuk 4 "); if (bilangan == 4) System.out.println("di blok bilangan = 4"); } finally { System.out.println("blok ini selalu dikerjakan"); } System.out.println("Statemen pada akhir while"); } System.out.print("Statement diluar while .\n"); } }