Belajar Java - Exception Handling & Debugging Dasar
Episode 7 of 24

Belajar Java - Exception Handling & Debugging Dasar

Episode ini membahas penanganan error di Java: struktur exception checked dan unchecked, blok try-catch-finally dan try-with-resources, rethrow exception, pembuatan custom exception, serta teknik debugging sederhana di IDE dan membaca stack trace.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Program yang baik tidak hanya berjalan saat semuanya normal — ia juga harus tetap stabil saat terjadi kesalahan. Episode 7 membahas exception handling dan debugging dasar, keterampilan yang membedakan pengembang pemula dari pengembang profesional.

Java memiliki sistem exception yang terstruktur. Kalian akan belajar membedakan checked dan unchecked exception, menangani error dengan try-catch, membersihkan resource dengan try-with-resources, membuat exception khusus, serta men-debug program dengan membaca stack trace dan fitur IDE.

Struktur Exception: Checked vs Unchecked

Checked Exception

Checked exception adalah exception yang wajib ditangani atau dideklarasikan oleh compiler. Contohnya IOException dan SQLException. Compiler memaksa kalian menulis try-catch atau menambahkan throws:

Checked exception wajib ditangani
import java.nio.file.*;
 
public class BacaFile {
    public static void main(String[] args) throws IOException {
        String isi = Files.readString(Path.of("data.txt"));
        System.out.println(isi);
    }
}

Tanpa penanganan, kode di atas tidak akan terkompilasi.

Unchecked Exception

Unchecked exception adalah turunan RuntimeException yang tidak wajib ditangani. Contohnya NullPointerException, ArithmeticException, dan IllegalArgumentException. Compiler tidak memaksa, tapi penanganannya tetap penting:

Unchecked exception
public class Demo {
    public static void main(String[] args) {
        int hasil = 10 / 0;  // ArithmeticException saat runtime
        System.out.println(hasil);
    }
}

Try-Catch-Finally dan Try-With-Resources

Blok Try-Catch-Finally

Struktur klasik penanganan exception terdiri dari try, catch, dan finally. Blok finally selalu dieksekusi, baik terjadi error maupun tidak:

Try-catch-finally
public static void proses() {
    try {
        int hasil = 10 / 0;
        System.out.println(hasil);
    } catch (ArithmeticException e) {
        System.out.println("Tidak bisa membagi nol");
    } finally {
        System.out.println("Selesai memproses");
    }
}

Try-With-Resources

Java 7 memperkenalkan try-with-resources untuk menutup resource secara otomatis. Resource yang mengimplementasikan AutoCloseable ditutup dengan sendirinya:

Try-with-resources
import java.io.*;
import java.nio.file.*;
 
public class Baca {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = Files.newBufferedReader(Path.of("data.txt"))) {
            System.out.println(reader.readLine());
        }
    }
}

try (BufferedReader reader = ...) menjamin reader ditutup otomatis, bahkan ketika exception terjadi di tengah blok.

Rethrow Exception dan Custom Exception

Rethrow Exception

Rethrow berarti menangkap exception lalu melemparnya kembali, kadang dengan penambahan konteks atau setelah logging:

Rethrow exception
public static void proses() throws IOException {
    try {
        bacaData();
    } catch (IOException e) {
        System.out.println("Log: gagal baca " + e.getMessage());
        throw e;
    }
}

Membuat Custom Exception

Untuk error bisnis yang spesifik, buat custom exception dengan memperluas RuntimeException atau Exception:

Custom exception
public class SaldoTidakCukupException extends RuntimeException {
    public SaldoTidakCukupException(String pesan) {
        super(pesan);
    }
}

Custom exception membuat kode lebih ekspresif dan memudahkan penanganan error yang spesifik:

Menggunakan custom exception
if (saldo < jumlah) {
    throw new SaldoTidakCukupException("Saldo " + saldo + " tidak mencukupi");
}

Debugging Sederhana dan Membaca Stack Trace

Membaca Stack Trace

Saat exception tidak ditangani, JVM mencetak stack trace — rantai pemanggilan method dari titik error hingga awal. Membacanya adalah keterampilan penting:

Contoh stack trace
Exception in thread "main" java.lang.NullPointerException
        at com.aplikasi.Order.hitungTotal(Order.java:42)
        at com.aplikasi.Main.main(Main.java:8)

Baris paling atas menunjukkan jenis exception, dan baris-baris berikutnya menunjukkan lokasi persis — class, method, dan nomor baris. Mulailah debugging dari baris pertama yang merujuk ke kode kalian sendiri.

Teknik Debugging di IDE

IDE modern seperti IntelliJ IDEA memiliki debugger visual. Teknik dasarnya:

  • Pasang breakpoint dengan klik pada gutter di samping nomor baris.
  • Jalankan dalam mode debug, bukan run biasa.
  • Periksa nilai variabel di panel Variables saat eksekusi berhenti.
  • Gunakan Step Over untuk menjalankan satu baris, atau Step Into untuk masuk ke method.

Debugger memungkinkan kalian mengamati state program secara live — jauh lebih efektif daripada menebak dari output.

Penutup

Episode 7 membekali kalian penanganan error: membedakan checked dan unchecked exception, menggunakan try-catch-finally dan try-with-resources, melakukan rethrow, membuat custom exception, serta men-debug dengan membaca stack trace dan fitur debugger IDE.

Inti yang harus dibawa pulang:

  • Checked exception wajib ditangani; unchecked tidak dipaksa compiler.
  • Try-with-resources menutup resource otomatis dan aman.
  • Rethrow menambahkan logging atau konteks sebelum melempar kembali.
  • Custom exception membuat error bisnis lebih ekspresif.
  • Stack trace dibaca dari baris paling atas menuju lokasi penyebab.
  • Debugger IDE dengan breakpoint lebih efektif daripada mencetak variabel.

Di episode 8 selanjutnya kita akan membahas input/output dan pengelolaan file — dasar I/O Java dengan java.io dan java.nio, membaca dan menulis file teks, binary, dan CSV, Path API, Files utility, dan working directory, serta praktik terbaik resource management dengan try-with-resources.