Exception Handling

try/catch/finally, jenis exception (checked vs unchecked), throw dan throws, exception buatan sendiri, dan try-with-resources.

Part 10 dari 17 ± 50 menit Gratis

Apa itu exception?

Exception adalah kejadian tak terduga saat program berjalan: membagi dengan nol, mengakses indeks di luar array, berkas tidak ditemukan, input bukan angka. Tanpa penanganan, program berhenti dengan stack trace. Dengan penanganan, program bisa pulih atau gagal dengan sopan.

int a = 10 / 0;   // ArithmeticException: / by zero

try / catch / finally

try {
    int angka = Integer.parseInt("abc");
    System.out.println(angka);
} catch (NumberFormatException e) {
    System.out.println("Bukan angka: " + e.getMessage());
} finally {
    System.out.println("Selalu dijalankan");
}
  • try — kode yang berisiko.
  • catch — penanganan jika exception terjadi. Boleh banyak catch; tulis yang spesifik dulu, umum belakangan.
  • finally — selalu jalan (berhasil ataupun gagal); cocok untuk membersihkan sumber daya.
  • Gabung beberapa jenis: catch (IOException | SQLException e).

Hierarki exception

JenisContohAturan
Checked (turunan Exception)IOException, SQLExceptionCompiler memaksa ditangani atau dideklarasikan dengan throws
Unchecked (turunan RuntimeException)NullPointerException, IllegalArgumentException, ArrayIndexOutOfBoundsExceptionTidak dipaksa; biasanya akibat bug yang harus diperbaiki
ErrorOutOfMemoryError, StackOverflowErrorMasalah serius JVM; jangan ditangkap

throw dan throws

static void tarik(double saldo, double jumlah) throws SaldoKurangException {
    if (jumlah > saldo) {
        throw new SaldoKurangException("Saldo tidak cukup");
    }
}
  • throw — melempar satu exception (pernyataan).
  • throws — pada deklarasi method, memberi tahu pemanggil bahwa method ini mungkin melempar exception checked.

Exception buatan sendiri

class SaldoKurangException extends Exception {
    public SaldoKurangException(String pesan) {
        super(pesan);
    }
}

Turunkan dari Exception (checked) bila pemanggil wajib menangani, atau dari RuntimeException (unchecked) untuk pelanggaran aturan/kesalahan pemrograman. Pakai nama yang menjelaskan masalah dan akhiri dengan Exception.

try-with-resources

Sumber daya seperti berkas atau koneksi harus ditutup. Dengan try-with-resources, objek yang mengimplementasikan AutoCloseable ditutup otomatis, bahkan ketika terjadi exception:

try (Scanner in = new Scanner(System.in)) {
    System.out.print("Angka: ");
    int n = in.nextInt();
    System.out.println(n * 2);
} catch (InputMismatchException e) {
    System.out.println("Harus angka!");
}   // in.close() dipanggil otomatis

Praktik baik

  • Jangan telan exception dengan catch kosong; setidaknya catat atau tampilkan pesannya, karena kegagalan yang tersembunyi sulit dilacak.
  • Tangkap exception yang spesifik, hindari catch (Exception e) kecuali di batas terluar program.
  • Jangan memakai exception sebagai pengganti if untuk alur normal.
  • Sertakan pesan yang jelas: apa yang salah dan nilai yang bermasalah.
  • Validasi di awal method (fail fast), contohnya melempar IllegalArgumentException untuk argumen tidak valid.

Membaca stack trace

Baris paling atas menyebut jenis exception dan pesannya; baris at ... di bawahnya menunjukkan rantai pemanggilan. Cari baris pertama yang berisi nama class milikmu — di situlah biasanya sumber masalahnya.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X