unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Eksepsi

Eksepsi #

Exception dalam Java adalah peristiwa yang terjadi selama eksekusi program yang mengganggu aliran normal dari instruksi program. Ketika terjadi exception, Java akan membuat sebuah objek exception yang kemudian dapat ditangani (ditangkap) atau dibiarkan merambat (propagate) melalui call stack hingga mencapai default handler yang akan menghentikan program dan menampilkan pesan error.

Konsep Dasar #

  1. Exception Handling: Merupakan proses penanganan kesalahan yang terjadi selama runtime. Dengan menggunakan exception handling, kita bisa menghindari crash program dan memberikan informasi yang lebih jelas kepada pengguna atau developer.

  2. Throwable: Semua kelas exception adalah subclass dari kelas Throwable. Throwable memiliki dua subclass utama:

    • Exception: Merupakan kesalahan yang bisa ditangani oleh program.
    • Error: Merupakan kesalahan yang biasanya tidak bisa ditangani oleh program (misalnya, OutOfMemoryError).
  3. Checked Exception: Exception yang harus ditangani (menggunakan try-catch atau deklarasi throws). Contoh: IOException, SQLException.

  4. Unchecked Exception: Exception yang tidak wajib ditangani. Biasanya, ini adalah subclass dari RuntimeException. Contoh: NullPointerException, ArrayIndexOutOfBoundsException.

Mekanisme Exception Handling #

Mekanisme utama dalam menangani exception di Java adalah menggunakan blok try-catch-finally.

  • try Block: Tempatkan kode yang mungkin menyebabkan exception dalam blok ini.
  • catch Block: Menangkap dan menangani exception yang dilempar oleh try block.
  • finally Block: Kode dalam blok ini akan selalu dijalankan, baik terjadi exception atau tidak. Ini biasanya digunakan untuk membersihkan sumber daya, seperti menutup file atau koneksi.

Contoh Penggunaan Exception #

try-catch #

public class ContohExceptionHandling {
    public static void main(String[] args) {
        try {
            int[] angka = {1, 2, 3};
            System.out.println("Akses elemen ke-4: " + angka[3]); // Akan menyebabkan ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Exception terjadi: " + e.getMessage());
        }
        System.out.println("Program terus berjalan setelah penanganan exception.");
    }
}

Penjelasan:

  • Kode di dalam blok try mencoba mengakses elemen ke-4 dari array yang hanya memiliki 3 elemen, yang menyebabkan ArrayIndexOutOfBoundsException.
  • Blok catch menangkap exception ini dan mencetak pesan kesalahan tanpa menghentikan program.
  • Program tetap berjalan setelah penanganan exception.

try-catch-finally #

public class ContohFinally {
    public static void main(String[] args) {
        try {
            int hasil = 10 / 0; // Akan menyebabkan ArithmeticException (pembagian dengan nol)
            System.out.println("Hasil: " + hasil);
        } catch (ArithmeticException e) {
            System.out.println("Tidak bisa membagi dengan nol.");
        } finally {
            System.out.println("Blok finally selalu dijalankan.");
        }
        System.out.println("Program berlanjut setelah try-catch-finally.");
    }
}

Penjelasan:

  • Kode di dalam try block mencoba melakukan pembagian dengan nol, yang menyebabkan ArithmeticException.
  • Blok catch menangani exception ini dengan mencetak pesan.
  • Blok finally selalu dieksekusi, mencetak “Blok finally selalu dijalankan.”, meskipun terjadi exception atau tidak.
  • Program berlanjut setelah try-catch-finally.

throws Exception #

import java.io.*;

public class ContohThrows {
    public static void bacaFile(String namaFile) throws IOException {
        FileReader fileReader = new FileReader(namaFile);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        
        String baris;
        while ((baris = bufferedReader.readLine()) != null) {
            System.out.println(baris);
        }
        bufferedReader.close();
    }

    public static void main(String[] args) {
        try {
            bacaFile("contoh.txt");
        } catch (IOException e) {
            System.out.println("File tidak ditemukan atau terjadi kesalahan dalam pembacaan file.");
        }
    }
}

Penjelasan:

  • Metode bacaFile dideklarasikan untuk melempar IOException menggunakan keyword throws.
  • Di dalam main method, bacaFile dipanggil di dalam try-catch block. Jika file tidak ditemukan atau terjadi kesalahan I/O, IOException akan ditangkap oleh catch block.

Custom Exception #

Kadang-kadang, Anda mungkin perlu membuat exception kustom yang lebih spesifik untuk aplikasi Anda.

class InvalidAgeException extends Exception {
    public InvalidAgeException(String message) {
        super(message);
    }
}

public class ContohCustomException {
    public static void validasiUmur(int umur) throws InvalidAgeException {
        if (umur < 18) {
            throw new InvalidAgeException("Umur tidak valid untuk pendaftaran (harus 18 tahun atau lebih).");
        } else {
            System.out.println("Umur valid untuk pendaftaran.");
        }
    }

    public static void main(String[] args) {
        try {
            validasiUmur(16);
        } catch (InvalidAgeException e) {
            System.out.println("Exception: " + e.getMessage());
        }
    }
}

Penjelasan:

  • InvalidAgeException adalah custom exception yang mewarisi Exception.
  • Jika umur kurang dari 18, custom exception dilempar dengan pesan kesalahan yang sesuai.
  • Exception ini kemudian ditangkap di main method dan dicetak ke layar.

Kesimpulan #

  • Exception Handling di Java adalah mekanisme yang kuat untuk menangani kesalahan runtime dan menjaga agar program tetap berjalan meskipun ada error.
  • try-catch-finally digunakan untuk menangkap dan menangani exception, serta memastikan bahwa kode tertentu selalu dijalankan.
  • Custom Exception memungkinkan pengembang membuat jenis exception baru yang spesifik untuk aplikasi mereka, yang membantu dalam penanganan kesalahan yang lebih terstruktur dan jelas.

Dengan menggunakan mekanisme exception handling yang tepat, Anda dapat membuat program yang lebih andal dan mudah dipelihara, serta memberikan pengalaman pengguna yang lebih baik dengan menghindari crash program yang tidak diinginkan.

« Interface
List »