Menyusun Program · Pelajaran 9 dari 10

Exception

9 menit baca · BelajarCode

Exception adalah objek yang mewakili keadaan tidak normal saat program berjalan, misalnya membagi dengan nol atau mengubah teks yang bukan angka.

Java
1public class Main {2    public static void main(String[] args) {3        String[] masukan = {"42", "abc", "0"};4        for (String teks : masukan) {5            try {6                int angka = Integer.parseInt(teks);7                System.out.println("100 / " + angka + " = " + (100 / angka));8            } catch (NumberFormatException e) {9                System.out.println("Bukan angka: " + e.getMessage());10            } catch (ArithmeticException e) {11                System.out.println("Kesalahan hitung: " + e.getMessage());12            } finally {13                System.out.println("Selesai memproses \"" + teks + "\"");14            }15        }16    }17}
Keluaran
100 / 42 = 2
Selesai memproses "42"
Bukan angka: For input string: "abc"
Selesai memproses "abc"
Kesalahan hitung: / by zero
Selesai memproses "0"
  • Kode yang mungkin gagal ditaruh di blok try.
  • Setiap catch menangkap jenis exception tertentu.
  • finally selalu dijalankan, ada exception atau tidak.
Exception yang sering ditemui
ExceptionPenyebab
NullPointerExceptionMemanggil metode pada variabel yang bernilai null
ArrayIndexOutOfBoundsExceptionIndeks array di luar batas
NumberFormatExceptionMengubah teks yang bukan angka dengan parseInt
ArithmeticExceptionPembagian bilangan bulat dengan nol
IllegalArgumentExceptionArgumen metode tidak valid

Checked dan unchecked

  • Unchecked exception (turunan RuntimeException), seperti contoh di tabel, biasanya menandakan kesalahan program. Tidak wajib ditangkap.
  • Checked exception (turunan Exception tetapi bukan RuntimeException) mewakili keadaan yang bisa diperkirakan, misalnya file tidak ditemukan. Kompiler mewajibkan exception ini ditangkap atau dideklarasikan dengan throws.

Exception buatan sendiri

Java
1class SaldoTidakCukupException extends Exception {2    SaldoTidakCukupException(long saldo, long diminta) {3        super("Saldo Rp" + saldo + " tidak cukup untuk menarik Rp" + diminta);4    }5}67class Rekening {8    private long saldo;910    Rekening(long saldo) {11        this.saldo = saldo;12    }1314    void tarik(long jumlah) throws SaldoTidakCukupException {15        if (jumlah <= 0) {16            throw new IllegalArgumentException("Jumlah harus positif");17        }18        if (jumlah > saldo) {19            throw new SaldoTidakCukupException(saldo, jumlah);20        }21        saldo -= jumlah;22    }2324    long getSaldo() {25        return saldo;26    }27}2829public class Main {30    public static void main(String[] args) {31        Rekening r = new Rekening(100000);32        long[] penarikan = {30000, 90000, -5};33        for (long jumlah : penarikan) {34            try {35                r.tarik(jumlah);36                System.out.println("Berhasil tarik " + jumlah + ", sisa " + r.getSaldo());37            } catch (SaldoTidakCukupException e) {38                System.out.println("Gagal: " + e.getMessage());39            } catch (IllegalArgumentException e) {40                System.out.println("Ditolak: " + e.getMessage());41            }42        }43    }44}
Keluaran
Berhasil tarik 30000, sisa 70000
Gagal: Saldo Rp70000 tidak cukup untuk menarik Rp90000
Ditolak: Jumlah harus positif

throws SaldoTidakCukupException pada metode memberi tahu pemanggil bahwa exception ini mungkin dilempar dan wajib ditangani.

Jangan menelan exception

Blok catch (Exception e) { } yang kosong menyembunyikan kesalahan. Program terlihat berjalan, padahal ada yang salah. Minimal, tampilkan atau catat pesan exception-nya.

Cek pemahaman

Apa perbedaan utama checked exception dan unchecked exception?

Latihan

Validasi umur

Buat metode static int bacaUmur(String teks) yang mengubah teks menjadi umur. Lempar IllegalArgumentException dengan pesan yang jelas jika teks bukan angka atau umurnya di luar 0 sampai 150. Uji dengan "25", "dua", dan "200".

Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Java online.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi