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.

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.
Checked exception adalah exception yang wajib ditangani atau dideklarasikan oleh compiler. Contohnya IOException dan SQLException. Compiler memaksa kalian menulis try-catch atau menambahkan throws:
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 adalah turunan RuntimeException yang tidak wajib ditangani. Contohnya NullPointerException, ArithmeticException, dan IllegalArgumentException. Compiler tidak memaksa, tapi penanganannya tetap penting:
public class Demo {
public static void main(String[] args) {
int hasil = 10 / 0; // ArithmeticException saat runtime
System.out.println(hasil);
}
}Struktur klasik penanganan exception terdiri dari try, catch, dan finally. Blok finally selalu dieksekusi, baik terjadi error maupun tidak:
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");
}
}Java 7 memperkenalkan try-with-resources untuk menutup resource secara otomatis. Resource yang mengimplementasikan AutoCloseable ditutup dengan sendirinya:
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 berarti menangkap exception lalu melemparnya kembali, kadang dengan penambahan konteks atau setelah logging:
public static void proses() throws IOException {
try {
bacaData();
} catch (IOException e) {
System.out.println("Log: gagal baca " + e.getMessage());
throw e;
}
}Untuk error bisnis yang spesifik, buat custom exception dengan memperluas RuntimeException atau Exception:
public class SaldoTidakCukupException extends RuntimeException {
public SaldoTidakCukupException(String pesan) {
super(pesan);
}
}Custom exception membuat kode lebih ekspresif dan memudahkan penanganan error yang spesifik:
if (saldo < jumlah) {
throw new SaldoTidakCukupException("Saldo " + saldo + " tidak mencukupi");
}Saat exception tidak ditangani, JVM mencetak stack trace — rantai pemanggilan method dari titik error hingga awal. Membacanya adalah keterampilan penting:
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.
IDE modern seperti IntelliJ IDEA memiliki debugger visual. Teknik dasarnya:
Debugger memungkinkan kalian mengamati state program secara live — jauh lebih efektif daripada menebak dari output.
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:
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.