Exception Handling dalam Java Programming


Outline :

Pengertian

Perbedaan antara Class Error dan Class Exception di java

Keyword penting pada exception handling

I. Pengertian

Pada dasarnya, Exception merupakan subkelas dari kelas java.lang.Throwable.  “Bukalah dokumentasi java untuk lebih menyakinkan anda”. Karena Exception adalah sebuah kelas maka hakikatnya ketika program berjalan dan muncul sebuah bug atau kesalahan maka bug tersebut dapat dianggap sebuah object.  Sehingga ketika object ini di tampilkan di layar maka java akan secara otomatis memanggil method toString yang terdapat dalam object bertipe Exception ini. Java memberikan akses kepada developer untuk mengambil object bug yang terjadi ini dengan mekanisme yang dikenal Exception Handling. Exception handling merupakan fasilitas di java yang memberikan flexibilitas kepada developer untuk menangkap bug atau kesalahan yang terjadi ketika program berjalan. Contoh Exception Handling akan dibahas pada bagian berikutnya.

II. Perbedaan antara Class Error dan Class Exception di java

Seperti yang telah dijelaskan diatas bahwa kelas Exception merupakan kelas turunan dari kelas Throwable di package Java.Lang. Selain Exception, java.lang.Throwable juga memiliki subclass yaitu class Error. Tentu, kita bertanya-tanya, sebetulnya apa sih perbedaan antara class Error dengan class Exception.

Penjelasan dari Class Error :

“An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions(JDK 5.0 Documentation)

Penjelasan dari class Exception :

“The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch. “ (JDK 5.0 Documentation)

Seperti dari penjelasan yang diberikan oleh JDK Documentation, maka dapat kita lihat bahwa error dan exception pada dasarnya berbeda. Error merupakan masalah yang muncul tapi tidak ada alasan yang kuat untuk menangkapnya. Sedangkan Exception merupakan kesalahan kecil yang muncul dan ingin diperlakukan sesuai keinginan developer.

III. Keyword penting pada exception handling

Ada 5 keyword penting dalam java dalam hal exception handling :

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

2. catch

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 0
			System.out.println("perintah selanjutnya");
		}
		catch(NullPointerException e)
		{
		}
		catch(ArrayIndexOutOfBoundsException e)
		{
		}
		catch(Exception e)
		{
		}
	}
}

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

4. 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. Sekarang jika anda menghilangkan keyword throw apa yang terjadi?.

5. throws

Keyword throws digunakan dalam suatu method atau kelas yang mungkin menghasilkan suatu kesalahan sehingga perlu ditangkap errornya. Cara mendefinisikannya dalam method adalah sebagai berikut : <method modifier> type method-name throws exception-list1, exceptio-list2, … {}.

Contoh Program :

public class A
{
	public static void main(String[] args) {
		try
		{
			f();
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}
	public static void f() throws NullPointerException, ArrayIndexOutOfBoundsException
	{
		//implementasi method
		throw new NullPointerException();
		//throw new ArrayIndexOutOfBoundsException();
	}
}

Output Program :

java.lang.NullPointerException

Contoh program lainnya :

public class A
{
	public static void main(String[] args) {
		try
		{
			f();
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}
	public static void f() throws NullPointerException, ArrayIndexOutOfBoundsException
	{
		//implementasi method
		//throw new NullPointerException();
		throw new ArrayIndexOutOfBoundsException();
	}
}

Output Program :

java.lang.ArrayIndexOutOfBoundsException

Perhatikan kedua contoh pengguaan keyword throws pada method. Ketika method tersebut dipanggil dalam block try. Maka method tersebut akan membuat object yang merupakan subclass dari class Throwable dan method tersebut akan melemparkan kesalahan yang ada dalam block method kedalam block try. Di dalam block try, kesalahan tersebut kemudian ditangkap kedalam block catch.

-Semoga membantu 🙂 –

  1. trimakasih atas ilmunya….
    tapi kalo melemparnya ke kelas gmn…
    tu td bukannya throw trhadap method…

    trimakasih…
    saya tunggu secepatnya……….

    • akhirnya, ada juga yang menanyakan hal ini.. thanks to you..

      yup, untuk kelas, java tidak bisa melakukan throws suatu Exception..

      silakan di coba sendiri 😉

    • faisal
    • July 9th, 2010

    saya btuh bantuan ni….
    saya dapat tugas dari kampus untuk membuat program yang menggunakan exception,TRY,CACTH dan TRHOW sebanyak 40 baris dalam 1 halaman…
    ada yang bisa memberi saya programnya tidak??
    kalo ada yang bisa mohon kirim program nya ke email saya…
    faisalrusli@yahoo.co.id
    terima kasih sebelumnya…

  2. kaka, saya mau nanya,saya dikasih tugas dari kampus,, dana ada input seperti ini “public static void main(String[] args) throws Exception” maksud dari throws exception ituh apa,, plizz bantu secepatnya, coz deadline nya besok,, kalo ada g bisa bantu hidup dan mati saya,, bisa ngirim infonya ke email saya ato balas disini ajah,, arsenal_fabregas@rocketmail.com

  3. wahh, maaf2,, saya baru melihat-lihat blog lagi
    menjawab pertanyaan tersebut,
    maksud throws Exception dalam suatu method adalah jika ada exception di dalam method tersebut maka exceptionnya akan dilempar ke bagian dimana method tersebut dipanggil. di dalam method yang memanggil itulah kemudian exception tersebut ditangkap atau dilempar lagi ke method yang memanggilnya kembali sampai ada yang menangkap exceptionnya. Namun dalam kasus yang kamu tanyakan, jika method public static void main(String[] args) men-throws Exception maka akan sia-sia saja karena method main merupakan method yang paling atas atau dalam artian tidak ada method yang memanggil method main, kecuali ada method static yang memanggil method ini.

    coba kamu compile program ini :

    class A
    {
    public static void main(String[] args) throws Exception{
    int a = 10/0;
    }
    }

    nama file: A.java

    • likas
    • November 30th, 2010

    makasi atas ilmunya,,bermanfaat sekali

    • hard
    • December 11th, 2010

    sangat sangat membantu.
    mkasih informasinya.

    saya mau tanya ni,
    akibat munculnya eksepsi pada program itu seperti apa ya?

    • yang dimaksud akibat apa ya? Exception itu berguna untuk menanggani kesalahan-kesalahan yang mungkin terjadi, misalnya file not found ketika hendak membuka file.. dalam bagian catch developer dapat mengimplementasikan apa yang harus dilakukan program kita untuk mengatasi masalah tersebut..

  4. wah makasih banget sangat membantu atas penjelasannya

    • arifin
    • March 18th, 2011

    ^__^ misi mas/om/pak numpang tanya, kira2 method yang di throws Exception bisa mengembalikan nilai ndak yach, makasi atas jawabannya ^__^

    • Achor Mohammad
    • October 14th, 2011

    makasih artikelnya. . . ^^

    • jirjis
    • December 19th, 2011

    terimaksih atas tutorialnya…. 🙂

  5. thanks gan, jadi ngerti beda nya satu soal exception

  6. thanks gan, jadi ngerti beda nya exception, try, catch, dan throws

    • Wong GAnteng
    • April 17th, 2012

    class CobaLempar
    {
    static void calculator(int a)
    {
    if(a10)
    {
    throw new IllegalArgumentException(“Inputan a harus di bawah 10”);
    }
    }

    public static void main(String[] Args)
    {
    try
    {
    String strInput = System.console().readLine(“Masukkan bilangan : “);
    int input = Integer.parseInt(strInput);
    calculator(input);
    }
    catch (IllegalArgumentException e)
    {
    System.out.println(e.getMessage());
    }
    finally
    {
    System.out.println(“End of program, ini finally”);
    }

    }
    }

    • yani
    • April 19th, 2012

    saya mau tanya, kjalau program yg saya buka menerima exception, apa yg harus sy lakukan..:(
    terima kasih

    • ehm, kalau anda sebagai developer ya handle exception tersebut,
      kalau sebagai user, maka hindari saja exceptionya, biasanya terdapat pesan errornya

      CMIIW

  7. help me! saya tak faham ape yang soalan ni nak..
    Write a program that raises two exceptions. Specify two catch clauses for the exceptions. Each catch block handles a different type of exception. For example exception could be ArithmeticException and ArrayIndexOutOfBoundsException, Display a message in the finally block.

  8. public class Q2
    {
    public static void main(String args[])
    {
    int [] arr = new int[5];
    try
    {
    int a = Integer.parseInt(args[0]);
    int b = Integer.parseInt(args[1]);
    int c = Integer.parseInt(args[2]);
    int d = Integer.parseInt(args[3]);
    int e = Integer.parseInt(args[4]);
    }
    catch(ArrayIndexOutOfBoundsException e)
    {
    System.out.println(“5 parameters are required!”);
    }
    System.out.println(“THANK YOU”);
    }
    }

    HELP ME! kenapa bila run saya masuk lebih dari 5 nombor xkeluar
    “5 parameters are required!” ??????

    • sudah saya reply via email ya.. semoga membantu

      • thanks :)) awak dah tlong sy

        • nurulhuda
        • November 14th, 2012

        mas tolong jawabannya pm ke email sya juga ya, penasaran

  9. develop a program to enable process of converting number to binary or octal number format. Program will start by requesting user to key-in any number. then the user can choose whether want to convert the number to binary number format or octal number format.your program will generate the code based on the selection by user . the output will be display to user based on the selection before. all the process in converting number to binary or octal format number will be implement using stack with linked list.

    HELP ME PLEASE 😥

  10. #include
    #include

    struct node{
    int info;
    struct node *link;
    } *top=NULL;

    void push(int a)
    {
    struct node *tmp;
    tmp = (struct node *)malloc(sizeof(struct node));
    tmp->info=a;
    tmp->link=top;
    top=tmp;
    }/*End of push()*/

    void pop()
    {
    struct node *tmp;
    if(top == NULL)
    printf(“Stack is empty\n”);
    else
    { tmp=top;
    printf(” %d”,tmp->info);
    top=top->link;
    free(tmp);
    }
    }

    void popc()
    {
    struct node *tmp;
    if(top == NULL)
    printf(“Stack is empty\n”);
    else
    { tmp=top;
    printf(” %c”,tmp->info);
    top=top->link;
    free(tmp);
    }
    }

    void hexa(int n)
    {
    int a,i=1;
    while(n>0)
    {
    a=n%16;
    n=n/16;
    if(a>9)
    push(a-10+’A’);
    else
    push(a+’0′);
    }
    printf(“output is:”);
    while(i0)
    {
    a=n%8;
    n=n/8;
    push(a);
    }
    printf(“\n octal equivalent of given number is”);

    while(i0)
    {
    a=n%2;
    n=n/2;
    push(a);
    }
    printf(“\nBinary equivalent of given number is”);
    while(i<=top)
    {
    pop();
    }

    }

    main()
    {
    int n,item;
    clrscr();
    printf("1. Hexaconversion\n");
    printf("2. Octal conversion\n");
    printf("3. Binary conversion\n");
    printf("4. Exit\n");
    printf("Enter any choice\n");
    scanf(" %d",&n);
    printf("Enter element");
    scanf(" %d",&item);
    switch(n)
    {
    case 1:
    hexa(item);
    break;

    case 2:
    octal(item);
    break;

    case 3:
    binary(item);
    break;

    case 4:

    break;
    default:
    break;
    }
    getch();
    }

  11. awak dah tidak komen kah

    • maaf sedang sibuk akhir2 ini, jadi tidak sempat membalas, terlebih lagi pertanyaannya detail & panjang.. saran saya, cobalah pecahkan terlebih dahulu, setelah itu baru ditanyakan letak kesulitannya di bagian apa (jangan di copy paste seluruh code programnya). Thanks

  12. import java.io.*;

    public class SeatsBooking
    {

    public static void main(String args[]) throws Exception
    {
    char movie;
    int date;
    int time;
    int quantity;

    final int SIZE = 7;
    final int SIZE2 = 4;

    String[][] seats = new String[SIZE][SIZE2];

    for (int i = 0; i < 7; i++) {
    seats[i][0] = "A";
    seats[i][1] = "B";
    seats[i][2] = "C";
    seats[i][3] = "D";
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    while (true)
    {
    System.out.println("\n1. Movie Title");
    System.out.println("2. Date");
    System.out.println("3. Display of Seat");
    System.out.println("4. Seat Selection");
    System.out.println("5. Exit");
    System.out.println("Enter your choice : ");

    String choice = br.readLine();

    switch (Integer.parseInt(choice))
    {
    case 1:

    System.out.println("a=prisoner of zenda");
    System.out.println("b=Chinese Ghost");
    System.out.println("c=FlyingBird");
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("\nEnter movie = ");
    String title = stdin.readLine();

    break;

    case 2:
    System.out.println("Enter Date: ");
    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("\nEnter date = ");
    String day = stdin.readLine();
    System.out.println("Enter month = ");
    String month = stdin.readLine();

    case 3:
    System.out.println(" \n [[[[[[[[[[[[[[[[[[[[[[[[[[[[[SCREEN]]]]]]]]]]]]]]]]]]]]]]]]]]]");
    display(seats);
    break;

    case 4:
    assign(seats);
    break;

    case 5:
    exit();
    break;

    default:
    System.out.println("\nInvalid input");
    }
    }
    }

    public static void display(String seats[][]) {
    for (int i = 0; i < 7; i++) {
    System.out.print(i + 1);
    for (int j = 0; j < 4; j++) {
    System.out.print(" " + seats[i][j]);
    }
    System.out.println();
    }
    }

    public static void assign(String seats[][]) throws Exception
    {

    display(seats);

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("\nEnter row = ");
    String row = br.readLine();
    System.out.println("Enter seat (A, B, C, D) = ");
    String col = br.readLine();

    for (int i = 0; i < 4; i++) {

    if (seats[Integer.parseInt(row) – 1][i].equalsIgnoreCase(col)) {
    seats[Integer.parseInt(row) – 1][i] = "X";
    }
    }
    }

    public static void exit() {
    System.exit(0);
    }
    }

    Macam mana mahu letak DATE, TIME, QUANTITY?? dan digunakan dalam assertion dan try catch finally.. please help me..

    • ardhan
    • October 23rd, 2012

    java.lang.ArrayIndexOutOfBoundsException

    maaf mas arti nya itu gmn yah

    • itu berarti kamu akses array ke-i padahal panjang arraynya l dimana i < l.
      contoh, misalkan kamu punya array berukuran 10, tapi kamu mau akses array yang ke 15, maka akan ada error java.lang.arrayindexoutofboundexception itu

  13. nurulhuda :

    mas tolong jawabannya pm ke email sya juga ya, penasaran

    emailnya apa ya ?

    • badrun
    • December 2nd, 2012

    brow blogmu kok bisa rapi gmn caranya

    • maksudnya code programnya ya ? saya menggunakan [ sourcecode ]

  14. Mas..saya buat project j2me pakai database postgre tetapi pas di run di output database terlihat tapi di emulator tidak terlihat dan dibawa output database td ada java.lang.arrayindexoutofboundsexception :0 itu terjadi kslahan dimana mas.bisa tolong di informasikan mas.mksh bnyk.

  15. keren mas makasi ilmunya (y)

  16. Bagaimana memproses inputan yg dari keyboard via GUI Interface untuk kemudian diproses dg Exceptioan Handling?

    • Abdu
    • September 17th, 2013

    Mas saya mau tanya, ketika saya menjalankan aplikasi java terus keluar = java.lang.NullPointerException, itu apa artinya ya ? terimakasih

    • sugi
    • December 11th, 2013

    keren penjelasananya.. singkat, padat dan jelas #duaJempol

  1. No trackbacks yet.

Leave a reply to sayastudentPUO Cancel reply