Jumat, 03 Maret 2017

Exception


1.Pengertian Exception
 Exception adalah suatu mekanisme yang digunakan oleh beberapa bahasa pemrograman untuk mendeskripsikan apa yang harus dilakukan jika ada suatu kondisi yang tidak diinginkan terjadi. Eksepsi dapat dijumpai saat:
  • Mengakses method dengan argumen yang tidak sesuai
  • Membuka file yang tidak ada
  • Koneksi jaringan yang terganggu
  • Manipulasi operan yang nilainya keluar dari batasan yang didefinisikan
  • Pemanggilan class yang tidak ada
Java menyediakan dua kategori besar untuk eksepsi yang disebut sebagai checked exception dan unchecked exception.
  • Checked Exception 
     Adalah eksepsi yang diantisipasi oleh programmer untuk dihandle dalam program dan terjadi dikarenakan oleh kondisi luar yang siap muncul saat program berjalan. Misalnya membuka file yang tidak ada atau gangguan jaringan.
     Yang termasuk checked exception adalah class 
java.lang.Throwable dan semua subclassnya, kecuali class dan subclass dari java.lang.Error dan java.lang.RuntimeError
  • Unchecked Exception
bisa muncul dari kondisi yang merepresentasikan adanya bug atau situasi yang secara umum dianggap terlalu sulit bagi program untuk menghandlenya. Disebut sebagai unchecked karena kita tidak perlu mengeceknya atau melakukan sesuatu jika kondisi ini terjadi. Eksepsi yang muncul dari kategori situasi yang merepresentasikan bug ini disebut sebagai runtime exception. Misalnya mengakses array melebihi size yang dimilikinya.
      Yang termasuk Unchecked exception
1.      java.lang.Error dan subclassnya
2.      java.lang.RuntimeException dan subclassnya.
  • Sedangkan eksepsi yang muncul sebagai akibat dari isu environment software – yang ini jarang sekali atau sulit sekali untuk dihandle- disebut sebagai error, misalnya running out memory.
 Jadi, class Exception mendefinisikan kondisi error yang ringan yang dijumpai oleh program. Sedangkan untuk kondisi error yang berat didefinisikan dengan Error.
  • Class Exception
adalah sebuah class dasar yang merepresentasikan checked exception. Dalam hal ini, bukannya membiarkan terjadinya penghentian program, sebaliknya Anda harus menuliskan beberapa kode untuk menghandle eksepsi dan berikutnya melanjutkan program.
  • Class Error
adalah class dasar yang digunakan untuk kondisi error serius yang tidak terdeteksi. Dalam banyak kasus, Anda harus membiarkan program diterminasi.
  • Class RuntimeException
adalah class dasar yang digunakan untuk unchecked exception yang bisa muncul sebagai akibat dari bug program. Pada banyak kasus, Anda harus membiarkan program dihentikan.  




2.Jenis-jenis Exception
1.      Try – Catch
Untuk penanganan exception, dalam Java digunakan blok try dan catch. Blok try digunakan untuk menempatkan kode-kode program Java yang mengandung kode program yang mungkin melemparkan exception. Blok catch digunakan untuk menempatkan kode-kode program Java yang digunakan untuk menangani sebuah exception tertentu. Setelah kita tambahkan blok try – catch untuk mengatasi error yang terjadi, maka program akan menampilkan pesan error bahwa ada error yang terjadi pada konsol. Sintaks blok try – catch adalah sebagai berikut :


Try
{
… kode program yang mungkin menghasilkan exception
}
Catch
{exception xx}{…}
Catch
{exception xx}{…}

Petunjuk Penulisan Program :
Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait.
Penulisan kode dalam blok mengikuti identasi.

2.      Multiple Catch
Untuk multiple catch akan kita gunakan jika blok try mungkin menimbulkan lebih dari satu exception. Sintaks blok multiple catch adalah sebagai berikut :

try
{
instruksi-1
instruksi-2
instruksi-3
……… diabaikan
instruksi-n
}
catch(tipe_eksepsi_1 e1)
{
}
catch(tipe_eksepsi_2 e2)
{
}
catch(tipe_eksepsi_3 e3)
{
}
….
catch(tipe_eksepsi_n en)
{
}

instruksi-lain
…….
3.      Try – Catch – Finally
Selain try – catch, kita dapat mendefinisikan blok try – catch dan finally yang memiliki proses yang lebih lengkap, karena pada finally kita dapat mendefinisikan kode program yang selalu dieksekusi, baik ada exception yang terjadi maupun bila tidak terjadi exception sama sekali. Bentuk umum dari blok try-catch-finally adalah sebagai berikut :

Try
{
//tulis pernyataan yang dapat mengakibatkan exception
//dalam blok ini
}

catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
. . .

catch( )
{
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}

Finally
{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
·        Notasi blok bersifat perintah
·        Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
·    Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
Pkeduanya.
·     Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari subclassesnya.
·     Try-catch yang menggunakan finally maka keyword finally tersebut fungsinya hampir sama dengan keyword default pada switch-case.


3.Pengertian (Try,catch,finally,throw)
a.Pengertian Try
Keyword ini biasanya digunakan dalam suatu block program. keyword ini digunakan untuk mencoba menjalankan block program kemudian mengenai dimana munculnya kesalahan yang ingin diproses. Keyword ini juga harus dipasangkan dengan keyword catch atau keyword finally yang akan dibahas pada point kedua dan ketiga.
Contoh penggunaan :
public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1 / 0; // berpotensi untuk menimbulkan kesalahan yaitu
            // pembagian dengan bilangan 0
            System.out.println("perintah selanjutnya");
        }
        catch (Exception kesalahan)
        {
            System.err.println(kesalahan);
        }
    }
}
Output :
java.lang.ArithmeticException: / by zero
Perhatikan contoh diatas, ada beberapa hal penting yang perlu dilihat. Pertama, block program yag diyakini menimbulkan kesalahan maka ada di dalam block try and catch.Kedua, kesalahan yang muncul akan dianggap sebagai object dan ditangkap catch kemudian di assign ke variable kesalahan dengan tipe Exception. Ketiga, perintah setelah munculnya kesalahan pada block try tidak akan dieksekusi.

Pengertian Catch
Blok catch digunakan sebagai Exception handler, blok ini akan menangkap Exception yang dilempar di dalam blok try. Blok catch digunakan untuk menspesifikasikan tipe Exception yang akan ditangani.
Minimal 1 blok try mempunyai 1 blok catch, jadi 1 blok try dapat mempunyai lebih dari 1 blok catch,
hal ini dapat berlaku jika terdapat lebih dari 1 Exception yang akan dilempar didalam blok try
.Jika anda sudah melihat contoh try maka secara tidak langsung anda sudah memahami kegunaan dari keyword ini. Dalam java, keyword catch harus dipasangkan dengan try. Kegunaan keyword ini adalah menangkap kesalahan atau bug yang terjadi dalam block try. Setelah menangkap kesalahan yang terjadi maka developer dapat melakukan hal apapun pada block catch sesuai keinginan developer. Contoh Program :
catch(Exception kesalahan)
{
    System.out.println(“mohon maaf, terdapat kesalahan pada program”);
    //lakukan hal lainnya disini
}
Keyword catch juga dapat diletakan berulang-ulang sesuai dengan kebutuhan. Contoh :
public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1/0;  //berpotensi untuk menimbulkan kesalahan yaitu pembagian dengan bilangan 0pembagian dengan bilangan 0
            System.out.println("perintah selanjutnya");
        }
        catch(NullPointerException e)
        {
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
        }
        catch(Exception e)
        {
        }
    }
}

Pengertian Finally
Keyword ini merupakan keyword yang menunjukan bahwa block program tersebut akan selalu dieksekusi meskipun adanya kesalahan yang muncul atau pun tidak ada. Contoh implementasinya pada program :
public class A
{
    public static void main(String[] args) {
        try
        {
            //int a = 1/0;
        }
        finally
        {
            System.out.println("terima kasih telah menjalankan program");
        }
    }
}
Output Program diatas:
terima kasih telah menjalankan program
Jika saya lakukan modifikasi program diatas menjadi  :
public class A
{
    public static void main(String[] args) {
        try
        {
            int a = 1/0;
        }
        catch (Exception e)
        {
            System.out.println(“ada kesalahan yang muncul”);
        }
        finally
        {
            System.out.println(“terima kasih telah menjalankan program”);
        }
    }
}
Output Program :
ada kesalahan yang muncul
terima kasih telah menjalankan program
Perhatikan kedua contoh diatas, block finally akan selalu dieksekusi meskipun adanya kesalahan atau tidak pada block try. Berbeda dengan keyword catch keyword finally hanya dapat diletakan 1 kali setelah keyword try.

Pengertian Throw
Keyword ini digunakan untuk melemparkan suatu bug yang dibuat secara manual. Contoh program :
public class A
{
    public static void main(String[] args) {
        try
        {
            throw new Exception("kesalahan terjadi");
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}
Output Program :
java.lang.Exception: kesalahan terjadi
Seperti yang anda lihat pada program diatas, pada keyword throw new Exception(“kesalahan terjadi”); akan melempar object bertipe exception yang merupakan subclass dari class Exception sehingga akan dianggap sebagai suatu kesalahan yang harus ditangkap oleh keyword catch.
Perhatikan contoh berikut ini :
public class A
{
    public static void main(String[] args) {
        try
        {
            throw new B(); //cobalah  ganti baris ini dengan à new B();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}
class B extends Exception
{
    B()
    {
    }
    public String toString()
    {
        return “object dengan tipe kelas B”;
    }
}
Output Program :
object dengan tipe kelas B
Program diatas telah mendefinisikan suatu kelas B mengextends dari kelas Exception. Ketika kita melakukan throw new B(); maka object dari kelas bertipe B ini akan dianggap kesalahan dan ditangkap oleh block catch.

4.Perbedaan Catch dan Finally
A.Catch
Blok catch digunakan sebagai Exception handler, blok ini akan menangkap Exception yang dilempar didalam blok try. Blok catch digunakan untuk menspesifikasikan tipe Exception yang akan ditangani.
B.Finally
Blok finally merupakan optional, boleh ada atau tidak. Satu blok try catch hanya 1 blok finally.Blok finally diakses pada urutan terakir dalam blok try catch finally, blok tetap diakses meskipun
ada atau tidak ada Exception.
5.Aturan Penggunaan Try, catch , dan throw
Beberapa aturan dalam membuat blok try-­‐catch-­‐finally:
•     Notasi blok bersifat perintah.
•    Setiap blok try terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
•    Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan.
•    Blok try harus diikuti oleh paling sedikit satu blok catch atau satu blok finally, atau keduanya.
•    Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus
membawa satu argumen, dimana exception pada blok tersebut akan ditangani.