Sabtu, 17 Desember 2011

HIRARKI CLASS EXCEPTION

Object

Throwable
Error                                               Exception

                                     RuntimeException

Exception dimulai dari Object kemudia ada class Throwable yang merupakan parent class dari semua jenis Exception, ada dua class yang merupakan turunan langsung dari class Throwable yaitu class Error dan class Exception, class Exception mempunyai satu turunan yaitu Runtime Exception.

Error biasa kesalahan yang tidak disebabkan terjadi karena kesalahan dalam aplilasi, lebih karena kepada keadaan JVM yang tidak normal, misalnya error karena kehabisan memory. Error tidak perlu di handle oleh try catch karena tidak ada cara untuk mengatasi itu. Secara teknis sebenarnya error bukanlah exception karena bukan merupakan turunan dari class Exception.

Class RuntimeException adalah class spesial yang disebut juga dengan unchecked exception. Disebut unchecked exception karena RuntimeException tidak perlu wajib di catch, seperti NullPointerException, ClassCastException, IndexOfBoundException

contoh RuntimeException
public class RuntimeExceptionTest{
             public static void main(String[] args){
                        int i = Integer.parseInt("abc");
                        System.out.println("kode setelah exception");
             }
}

menyebabkan error karena berusaha merubah String "abc" menjadi angka, tidak ada statement try catch untuk menghandle runtime Exception. Tanpa adanya try catch maka akan segera keluar dari method, karena ini method main dan tidak ada method yang lain (analogi call stack dengan gedung tinggi), aplikasi akan keluar dan "kode setelah exception" tidak akan ditampilkan

Jika tidak yakin dengan string yang diubah ke integer kita dapat meletakkan statement try catch.

public class RuntimeExceptionTest{
             public static void main(String[] args){
                       int i = 0;
                       try{
                                 i = Integer.parseInt("abc");
                       }catch(NumberFormatException ex){
                                 ex.printStackTrace(); 
                       }
                        System.out.println("kode setelah exception");
             }
}

saat terjadi exception kode akan melompat ke catch dan mencetak stack trace ke konsole kemudian melanjutkan print string "kode setelah exception" ke console sehingga kode menjadi lebih handal dan tidak menyebabkan program keluar sebelum eksekusi selesai semuanya.
Class Exception yang bukan turunan dari RuntimeException adalah checked exception. Kode didalam tipe ini harus diletakkan dalam blok try jika tidak maka akan terjadi kompilasi error. Contoh kode untuk membuka file yang mengandung checked exception yaitu IOException

import java.io.FileInputStream;
public class CheckedExceptionTest{
           public static void main(String[] args){
                       FileInputStream inputStream = new FileInputStream("buka-file.txt");
                       System.out.println("kode setelah buka file");
           }
}


kompilasi error


CheckedExceptionTest.java:7: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
                       FileInputStream inputStream = new FileInputStream("buka-file.txt");

tambahkan try catch

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class CheckedExceptionTest{
           public static void main(String[] args){
                 try{
                       FileInputStream inputStream = new FileInputStream("buka-file.txt");
                 }catch(FileNotFoundException ex){
                       ex.printStackTrace();
                 }catch(IOException ex){
                        ex.printStackTrace();
                 }
                  System.out.println("kode setelah buka file");
           }
}

bisa juga hanya dihandle oleh IOException karena FileNotFoundException merupakan turunan dari class IOException


import java.io.FileInputStream;
import java.io.IOException;

public class CheckedExceptionTest{
           public static void main(String[] args){
                 try{
                       FileInputStream inputStream = new FileInputStream("buka-file.txt");
                 }catch(IOException ex){
                        ex.printStackTrace();

                 }
                  System.out.println("kode setelah buka file");
           }
}

IOException juga merupaka turunan dari class Exception sehingga dapat juga di tangkap dengan class Exception artinya semua exception dapat ditangkap dengan class Exception tetapi tidak demikian karena penangkapan exception harus pada class Exception yang spesifik

2 komentar: