Praktikum PBO

Exception Handling

Menangani error secara elegan agar aplikasi tidak crash.

1. Pengantar & Analogi Dunia Nyata

Bayangkan kamu sedang Ujian Online di kampus. Normalnya, alur ujian itu lancar: Login -> Kerjakan Soal -> Submit -> Selesai.

Tapi, dunia nyata tidak selalu sempurna. Banyak hal bisa salah:

  • Koneksi putus saat submit (IOException).
  • File jawaban corrupt (DataFormatException).
  • Waktu habis sebelum submit (TimeOutException).

Kalau sistem kampus jelek, begitu ada error sedikit, websitenya langsung CRASH (layar putih/error 500), dan jawabanmu hilang semua. Mahasiswa panik, dosen marah.

Sistem yang bagus punya Exception Handling. Kalau koneksi putus, dia tidak crash, tapi memunculkan pesan: "Koneksi terganggu, mencoba menyimpan jawaban lokal...".

Inilah Exception Handling: Mekanisme penyelamat saat terjadi hal yang tidak diinginkan, supaya program tetap berjalan atau mati dengan terhormat (graceful exit).

Komponen Utama (Analogi)

  • try (Percobaan): "Coba kirim jawaban ujian ini..."
  • catch (Penanganan): "KALAU koneksi putus, tolong simpan di draft dulu."
  • finally (Wajib): "Mau sukses atau gagal, TANTAP catat log aktivitas mahasiswa ini di server."
  • throw (Melempar Masalah): Mahasiswa lapor ke pengawas, "Pak, komputer saya mati!"
  • throws (Peringatan): Di pintu ruang ujian ada tulisan: "AWAS! Ruangan ini berpotensi mati lampu."

2. Konsep Teknis

Di Java, Exception adalah object yang merepresentasikan error atau kondisi tidak normal.

Ada dua jenis utama Exception:

A. Checked Exception (Wajib Diurus)

Ini seperti Bencana Alam atau Masalah Eksternal. Java mewajibkan kita untuk menanganinya (try-catch) atau mendeklarasikannya (throws).

  • Contoh: IOException (File gak ada), SQLException (Database mati).
  • Analogi: "Hujan Badai". Kita harus bawa payung (catch) sebelum keluar rumah. Kalau gak, compiler bakal marah.

B. Unchecked / Runtime Exception (Kecerobohan Programmer)

Ini seperti Keteledoran Sendiri. Java tidak memaksa kita menanganinya, tapi kalau terjadi, program akan crash. Biasanya karena logika coding yang salah.

  • Contoh: NullPointerException (Object kosong diakses), ArrayIndexOutOfBoundsException (Akses array di luar batas), ArithmeticException (Bagi dengan nol).
  • Analogi: "Lupa bawa kartu ujian". Itu salahmu sendiri, bukan salah alam semesta.

3. Komponen Utama

Struktur dasar penanganan error di Java:

Penting!

Blok finally akan SELALU dieksekusi, baik terjadi error maupun tidak. Biasanya dipakai untuk bersih-bersih (tutup koneksi database, tutup file, dll).

4. Studi Kasus Koding (Java)

Kita buat sistem Upload Tugas. Kita akan simulasikan error kalau file terlalu besar atau kalau format salah.

File: SistemUpload.java

public class SistemUpload {

    // Method ini BERPOTENSI error (Checked Exception)
    // Kita kasih peringatan 'throws Exception'
    public static void uploadTugas(String namaFile, int ukuranMB) throws Exception {
        System.out.println("Mencoba upload " + namaFile + "...");

        // Simulasi Validasi
        if (ukuranMB > 50) {
            // Melempar error secara sengaja
            throw new Exception("FileTerlaluBesar: Maksimal 50MB!");
        }

        if (!namaFile.endsWith(".pdf")) {
            throw new IllegalArgumentException("FormatSalah: Harus PDF!");
        }

        System.out.println("Sukses! File " + namaFile + " diterima.");
    }

    public static void main(String[] args) {
        // Kasus 1: Mahasiswa Rajin (Sukses)
        System.out.println("--- Percobaan 1 ---");
        try {
            uploadTugas("TugasAkhir.pdf", 10);
        } catch (Exception e) {
            System.out.println("Gagal: " + e.getMessage());
        }

        // Kasus 2: Mahasiswa File Gede (Error Checked)
        System.out.println("\n--- Percobaan 2 ---");
        try {
            uploadTugas("VideoDokumenter.mp4", 120);
        } catch (Exception e) {
            // Menangkap error yang dilempar tadi
            System.out.println("❌ ERROR TERTANGKAP: " + e.getMessage());
            System.out.println("Solusi: Kompres file video kamu.");
        } finally {
            System.out.println("Sistem: Sesi upload ditutup.");
        }
        
        // Kasus 3: Kecerobohan (Unchecked Exception - Bagi 0)
        System.out.println("\n--- Percobaan 3 (Runtime Error) ---");
        try {
            int nilai = 100;
            int pembagi = 0; // Kecerobohan programmer
            int hasil = nilai / pembagi; 
        } catch (ArithmeticException e) {
            System.out.println("❌ FATAL: Jangan membagi dengan nol! (" + e.getMessage() + ")");
        }
    }
}

5. Bedah Kode

  1. throws Exception:
    • Method uploadTugas ngasih peringatan: "Eh, gue bisa error loh ya. Siapapun yang panggil gue, harus siap-siap catch errornya."
  2. throw new Exception(...):
    • Ini cara kita membuat error secara manual. "Kalau file > 50MB, LEMPAR ERROR!". Program langsung berhenti di baris ini dan loncat ke catch.
  3. try { ... }:
    • Wilayah aman. Kode yang berisiko ditaruh di sini.
  4. catch (Exception e) { ... }:
    • Jaring pengaman. Kalau di dalam try ada yang melempar error, catch akan menangkapnya. Variabel e berisi detail errornya.
  5. finally { ... }:
    • Kode yang setia. Dia akan jalan terus, mau error atau sukses. Di contoh Kasus 2, kita lihat "Sesi upload ditutup" tetap muncul meskipun upload gagal.

6. Latihan

Sebuah aplikasi kalkulator sering crash saat pengguna mencoba membagi angka dengan nol. Kamu diminta membuat fungsi pembagian yang aman dan memberikan pesan error yang jelas.

Buatlah class Calculator yang menangani error aritmatika:

1. Static Method

  • divide(int a, int b): Menerima dua angka.
  • Validasi: Jika b == 0, lempar error: throw new IllegalArgumentException("Tidak bisa membagi dengan nol!");
  • Sukses: Kembalikan hasil pembagian integer a / b.

Tips: Method ini harus mendeklarasikan bahwa ia bisa melempar error, atau melempar runtime exception seperti di atas.

Output yang Diharapkan

Kasus Valid (10 / 2):

Hasil: 5

Kasus Error (10 / 0):

Error: Tidak bisa membagi dengan nol!
Main.java

7. Kesimpulan

Exception Handling membuat aplikasimu Tangguh.

  • Tanpa try-catch: Aplikasi crash, user lihat pesan error aneh, user uninstall aplikasi.
  • Dengan try-catch: Aplikasi bertahan, user dikasih tau "Maaf file kegedean", user coba lagi.

Ingat mantra ini: "Catch the specific, not the generic". Sebaiknya catch (NullPointerException e) daripada cuma catch (Exception e) biar penanganannya lebih spesifik!

On this page