Pengertian exception handling
Kesalahan dalam sebuah program sering kali muncul, meskipun program tersebut dibuat oleh programmer berkemampuan tinggi. Untuk menghindari pemborosan waktu pada proses pencarian kesalahan, Java menyediakan mekanisme penanganan exception. Exception adalah singkatan dari Exceptional Events. Menurut definisi umum, exception adalah kondisi abnormal yang terjadi saat runtime. Runtime error atau kesalahan-kesalahan yang terjadi pada saat program berjalan diwujudkan dan exception. Exception dapat dibangkitkan secara otomatis oleh sistem Java runtime maupun sengaja kita buat melalui pernyataan tertentu untuk tujuan tertentu.Perhatikan kode program berikut:
public class DivByZero {
public static void main(String args[]) {
int a = 5, b = 0, c;
c = a/b;
System.out.println("c = " + c);
}
}
Kode program di atas, secara sintaks tidak salah. Namun ada kesalahan yang fatal yaitu: ada pembagian dengan 0. Yaitu a = 5 dibagi b = 0. Kesalahan seperti ini sering terjadi karena memang tidak kentara bila kita tidak cermat. Apabila kita kompilasi kode program tersebut, maka kompilasi akan berlangsung sukses. Namun bila kita jalankan, kita tidak akan mendapatkan hasil tetapi program akan menampilkan pesan terjadinya exception atau kondisi tidak normal (gambar 8.8) dan program akan berhenti.
Pesan pada gambar 8.8 tersebut menginformasikan tipe exception yang terjadi pada baris dimana exception itu berasal. Inilah aksi default yang terjadi bila terjadi exception yang tidak tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi, aksi default akan bekerja otomatis.
Beberapa tipe exception yang umum antara lain:
- ArithmeticException. Exception karena kesalahan yang ada hubungannya dengan perhitungan, misalnya: pembagian dengan 0.
- ArrayIndexOutOfBoundException. Exception karena membaca indeks array diluar batas yang ditetapkan.
- NullPointerException. Kesalahan karena pointer yang tidak berisi (null)
- Dan lain-lain
Try dan catch
Try digunakan untuk membuat blok yang berisi pernyataan-pernyataan yang mungkin menimbulkan exception. Apabila dalam proses eksekusi pernyataan-pernyataan pada blok tersebut terjadi exception, maka exception akan dilempar ke bagian blok penangkap exception yang dibuat dengan kata kunci catch. Perhatikan contoh berikut ini.Contoh 8.15. Exception dengan try-catch.
public class DivByZero {
public static void main(String args[]) {
int a = 5, b = 0, c;
try {
c = a/b;
} catch (ArithmeticException exc) {
//Reaksi jika terjadi exception
System.out.println(exc);
}
System.out.println("Setelah exception");
}
}
Kode program pada contoh 8.15 ini adalah pengembangan dari kode program sebelumnya. Pernyataan c = a/b merupakan pernyataan yang kita uji apakah mengandung exception atau tidak. Jika terjadi exception maka exception akan dilempar ke bagian catch. Exception yang kita periksa adalah ArithmeticException. Reaksi yang muncul jika terjadi exception adalah menjalankan pernyataan System.out.println(exc);. Dengan mekanisme seperti ini maka program tidak akan dipaksa berhenti, dan perintah setelah blok try-catch tetap bisa dijalankan. Gambar 8.9. menunjukkan hasil eksekusi kode program di atas. Bandingkan dengan gambar 8.8.
Umumnya exception pada satu masalah tidak hanya satu. Pada contoh 8.16 berikut ini, kita menggunakan beberapa tipe exception untuk memeriksa kemungkinan terjadi exception. Ketik kode program berikut kemudian jalankan dan amati apa yang terjadi.
Contoh 8.16. Exception dengan try-catch.
class BanyakEksepsi {
public static void test(int a, int b) {
try {
int c = a / b;
System.out.println("Hasil bagi: " + c);
int[] Arr = {1,2,3,4,5}; // array dengan 5 elemen
Arr[10] = 11; // mengakses indeks ke-10
} catch (ArithmeticException ae) {
System.out.println("Terdapat pembagian dengan 0");
System.out.println(ae);
} catch (ArrayIndexOutOfBoundsException oobe) {
System.out.println("Indeks di luar rentang");
System.out.println(oobe);
}
}
public static void main(String[] args) {
test(4, 0); // menimbulkan ArithmeticException
System.out.println();
test(12, 4); // menimbulkan
ArrayIndexOutOfBoundsException
}
}
Throw
Disamping menangkap exception, Java juga mengijinkan seorang user untuk melempar (throw) sebuah exception. Perhatikan contoh 8.17 berikut ini.Contoh 8.17. Exception dengan try-catch dan throw.
class ThrowDemo {
public static void main(String args[]){
String input = "Salah input";
try {
if (input.equals("Salah input")) {
throw new
RuntimeException("Demonstrasi Throw");
} else {
System.out.println(input);
}
System.out.println("Setelah throw");
} catch (RuntimeException e) {
System.out.println("Exception
ditangkap di sini.");
System.out.println(e);
}
}
}
Perhatikan pada pernyataan yang dimulai dari perintah if. Kalau diartikan, pernyataan tersebut adalah: jika nilai variabel input sama dengan "Salah input", maka lemparkan exception dengan menampilkan "Demonstrasi Throw". Output dari kode program ini akan tampak seperti pada gambar 8.10.
Finally
Blok finally mengandung kode penanganan setelah penggunaan try dan catch. Blok kode ini selalu tereksekusi apapun yang terjadi pada blok try. Blok kode tersebut juga akan menghasilkan nilai true meskipun return, continue, ataupun break tereksekusi. Perhatikan kode program berikut.Contoh 8.18. Exception dengan try-catch-finally.
class DemoFinally {
private static int i = 0;
public static void main(String[] args) {
while (true) {
try {
System.out.print("Pada saat i = " + i + ": ");
if (i++ == 0) {
throw new Exception(); // melempar exception
}
System.out.println("Tidak terjadi exception");
} catch (Exception e) {
System.out.println("Terdapat exception");
} finally {
System.out.println("Pernyataan dalam blok
finally\n");
if (i == 2) {
break; // pada saat i==2, pengulangan akan
berhenti
}
}
}
}
}
Bila kode program dijalankan maka akan tampak seperti pada gambar 8.11. Perhatikan, bahwa apa yang ada pada blok kode finally akan selalu dijalankan.
makasih
BalasHapus