Modul 10 : Exception Handling - IvanSholana/Pemrograman-Berbasis-Objek-Sistem-Informasi GitHub Wiki

Definisi Exception Handling

Di dalam sebuah pemrograman terdapat beberapa macam error tetapi secara garis besar error tersebut terbagi menjadi dua yaitu error ketika compile time dan error ketika run time. Error ketika compile time sering terjadi karena kesalahan sintaksis sehingga menimbulkan error ketika dieksekusi tetapi error ketika run time adalah error yang terjadi ketika program telah berjalan. Error ini umumnya terjadi karena hasil pemrosesan input oleh user yang terjadi saat run time sehingga tidak diketahui ketika compile time.

Error yang terjadi ketika run time dan berasal dari input user dapat kita cegah atau atasi menggunakan Exception Handling. Oleh karena itu secara definisi umum, exception handling adalah mekanisme dalam pemrograman untuk menangani kesalahan atau error yang terjadi saat program dijalankan. Ambil contoh adalah kode program di bawah ini:

import java.util.Scanner;

public class exception {
    public static void main(String[] args) {
        Scanner inputan = new Scanner(System.in);
        int x = inputan.nextInt();
        int y = inputan.nextInt();
        System.out.println(x / y);
    }
}

Kode program di atas akan menjalankan operasi pembagian dua buah angka tetapi coba ingat kembali, apakah diperbolehkan suatu angka dibagi dengan 0? Yups, pembagian dengan 0 tidak diizinkan di dalam matematika. Namun, bagaimana jika user melakukan input ke dalam variabel y dengan nilai 0? apa yang terjadi pada program? Perhatikan output di bawah ini:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at exception.main(exception.java:8)

Output di atas merupakan output yang diberikan oleh program ketika nilai variabel y diinputkan dengan nilai 0. Bersamaan dengan output itu, program tersebut berhenti berjalan. Oleh karena itu, dengan menggunakan exception handling kita dapat mengatasi permasalahan tersebut sehingga program tidak berhenti saat bertemu dengan error yang demikian.

Try-Catch

Contoh error di atas tadi dapat kita atasi menggunakan try-catch. Dengan menggunakan try-catch maka error yang sebelumnya menyebabkan program berhenti. Contoh penggunannya adalah sebagai berikut:

import java.util.Scanner;

public class exception {
    public static void main(String[] args) throws ArithmeticException {
        try {
            System.out.println(1 / 0);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println("hello world");
    }
}

Dengan menggunakan kode di atas output yang akan dihasilkan sebagai berikut:

/ by zero
hello world

Dapat dilihat pada contoh di atas bahwa output hello world akan dioutputkan meskipun terjadi error pada bagian sebelumnya. Hal tersebut menandakan bahwa program tetap berjalan meskipun terjadi error. Hal tersebutlah yang disebut dengan Exception Handling.

Finally

Finally merupakan keyword yang dapat kita gunakan untuk menjalankan suatu statement setelah try-cath terjadi. Contoh:

import java.util.Scanner;

public class exception {
    public static void main(String[] args) throws ArithmeticException {
        try {
            System.out.println(1 / 0);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }finally {
            System.out.println("hello world");
        }
    }
}

Pada contoh di atas statement hello world akan dijalankan setelah proses try-catch dilakukan terlepas apakah ada error yang terjadi atau tidak.

Throw dan Throws

Selain beberapa keyword di atas terdapat juga keyword throw dan throws yang mana memiliki kegunaan masing - masing. Adapun untuk throw adalah keyword yang digunakan untuk melakukan menjalankan exception handling terhadap suatu kondisi yang kita tentukan sendiri. Sebagai contoh seperti berikut:

import java.util.Scanner;

public class exception {
    public static void main(String[] args) throws ArithmeticException {
        try {
            int x = 5;
            if(x == 5){
                throw new Exception("Error mzzzz!!!");
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

Ketika dijalankan maka output yang akan diberikan oleh program adalah sebagai berikut:

Error mzzzz!!!

Dapat dilihat dari output di atas bahwa x dengan nilai 5 maka akan dianggap error sehingga catch akan dijalankan. Hal tersebut menunjukkan bahwa throw merupakan keyword yang digunakan untuk menentukkan suatu kondisi sebagai error. Selain throw juga terdapat throws, berbeda dengan throw tujuan dari throws adalah memberikan informasi bahwa sebuah method memiliki kemungkinan terjadinya error sehingga perlu dilakukan error handling pada pemanggil method. Untuk contoh penggunannya dapat dilihat pada contoh berikut ini:

import java.util.Scanner;

public class exception {
    public static void main(String[] args) throws ArithmeticException {
        try {
            int x = hitung(1,0);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    public static int hitung(int x, int y) throws ArithmeticException{
        return x / y;
    }
}

Pada contoh di atas menunjukkan penggunaan throws untuk mengiformasikan bahwa fungsi hitung memiliki kemungkinan error yang terjadi yang mana harus dihandle oleh pemanggil method tersebut yang mana pada contoh di atas telah dihandle menggunakan try-cath.

Membuat Error

Selain menggunakan error yang sudah disediakan kita juga dapat membuat error kita sendiri mengikuti kebutuhan dari program. Untuk melakukan hal tersebut dapat dilakukan dengan membuat sebuah subclass dari class extends dan mendeklarasikan object classnya. Untuk lebih jelasnnya dapat dilihat pada contoh berikut:

import java.util.Scanner;
class UmurError extends Exception{
    UmurError(String Massage){
        super(Massage);
    }
}

public class exception {
    public static void main(String[] args) throws ArithmeticException {
    try {
        int x = 5;
        if(x == 5){
            throw new UmurError("Umur tidak boleh lebih dari 5");
        }
    }catch (Exception e){
        System.out.println(e.getMessage());
    }
    }
}

Pada contoh di atas kita membuat sebuah exception baru dengan nama exception UmurError dan pesan "Umur tidak boleh lebih dari 5" yang mana kita kombinasikan dengan throw yang mengartikan bahwa jika nilai x = 5 maka akan dianggap error dan akan dihandle.