Eksepsi #
Exception dalam Java adalah peristiwa yang terjadi selama eksekusi program yang mengganggu aliran normal dari instruksi program. Ketika terjadi exception, Java akan membuat sebuah objek exception yang kemudian dapat ditangani (ditangkap) atau dibiarkan merambat (propagate) melalui call stack hingga mencapai default handler yang akan menghentikan program dan menampilkan pesan error.
Konsep Dasar #
-
Exception Handling: Merupakan proses penanganan kesalahan yang terjadi selama runtime. Dengan menggunakan exception handling, kita bisa menghindari crash program dan memberikan informasi yang lebih jelas kepada pengguna atau developer.
-
Throwable: Semua kelas exception adalah subclass dari kelas
Throwable.Throwablememiliki dua subclass utama:- Exception: Merupakan kesalahan yang bisa ditangani oleh program.
- Error: Merupakan kesalahan yang biasanya tidak bisa ditangani oleh program (misalnya,
OutOfMemoryError).
-
Checked Exception: Exception yang harus ditangani (menggunakan
try-catchatau deklarasithrows). Contoh:IOException,SQLException. -
Unchecked Exception: Exception yang tidak wajib ditangani. Biasanya, ini adalah subclass dari
RuntimeException. Contoh:NullPointerException,ArrayIndexOutOfBoundsException.
Mekanisme Exception Handling #
Mekanisme utama dalam menangani exception di Java adalah menggunakan blok try-catch-finally.
tryBlock: Tempatkan kode yang mungkin menyebabkan exception dalam blok ini.catchBlock: Menangkap dan menangani exception yang dilempar olehtryblock.finallyBlock: Kode dalam blok ini akan selalu dijalankan, baik terjadi exception atau tidak. Ini biasanya digunakan untuk membersihkan sumber daya, seperti menutup file atau koneksi.
Contoh Penggunaan Exception #
try-catch
#
public class ContohExceptionHandling {
public static void main(String[] args) {
try {
int[] angka = {1, 2, 3};
System.out.println("Akses elemen ke-4: " + angka[3]); // Akan menyebabkan ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception terjadi: " + e.getMessage());
}
System.out.println("Program terus berjalan setelah penanganan exception.");
}
}
Penjelasan:
- Kode di dalam blok
trymencoba mengakses elemen ke-4 dari array yang hanya memiliki 3 elemen, yang menyebabkanArrayIndexOutOfBoundsException. - Blok
catchmenangkap exception ini dan mencetak pesan kesalahan tanpa menghentikan program. - Program tetap berjalan setelah penanganan exception.
try-catch-finally
#
public class ContohFinally {
public static void main(String[] args) {
try {
int hasil = 10 / 0; // Akan menyebabkan ArithmeticException (pembagian dengan nol)
System.out.println("Hasil: " + hasil);
} catch (ArithmeticException e) {
System.out.println("Tidak bisa membagi dengan nol.");
} finally {
System.out.println("Blok finally selalu dijalankan.");
}
System.out.println("Program berlanjut setelah try-catch-finally.");
}
}
Penjelasan:
- Kode di dalam
tryblock mencoba melakukan pembagian dengan nol, yang menyebabkanArithmeticException. - Blok
catchmenangani exception ini dengan mencetak pesan. - Blok
finallyselalu dieksekusi, mencetak “Blok finally selalu dijalankan.”, meskipun terjadi exception atau tidak. - Program berlanjut setelah try-catch-finally.
throws Exception
#
import java.io.*;
public class ContohThrows {
public static void bacaFile(String namaFile) throws IOException {
FileReader fileReader = new FileReader(namaFile);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String baris;
while ((baris = bufferedReader.readLine()) != null) {
System.out.println(baris);
}
bufferedReader.close();
}
public static void main(String[] args) {
try {
bacaFile("contoh.txt");
} catch (IOException e) {
System.out.println("File tidak ditemukan atau terjadi kesalahan dalam pembacaan file.");
}
}
}
Penjelasan:
- Metode
bacaFiledideklarasikan untuk melemparIOExceptionmenggunakan keywordthrows. - Di dalam
mainmethod,bacaFiledipanggil di dalamtry-catchblock. Jika file tidak ditemukan atau terjadi kesalahan I/O,IOExceptionakan ditangkap olehcatchblock.
Custom Exception #
Kadang-kadang, Anda mungkin perlu membuat exception kustom yang lebih spesifik untuk aplikasi Anda.
class InvalidAgeException extends Exception {
public InvalidAgeException(String message) {
super(message);
}
}
public class ContohCustomException {
public static void validasiUmur(int umur) throws InvalidAgeException {
if (umur < 18) {
throw new InvalidAgeException("Umur tidak valid untuk pendaftaran (harus 18 tahun atau lebih).");
} else {
System.out.println("Umur valid untuk pendaftaran.");
}
}
public static void main(String[] args) {
try {
validasiUmur(16);
} catch (InvalidAgeException e) {
System.out.println("Exception: " + e.getMessage());
}
}
}
Penjelasan:
InvalidAgeExceptionadalah custom exception yang mewarisiException.- Jika
umurkurang dari 18, custom exception dilempar dengan pesan kesalahan yang sesuai. - Exception ini kemudian ditangkap di
mainmethod dan dicetak ke layar.
Kesimpulan #
- Exception Handling di Java adalah mekanisme yang kuat untuk menangani kesalahan runtime dan menjaga agar program tetap berjalan meskipun ada error.
try-catch-finallydigunakan untuk menangkap dan menangani exception, serta memastikan bahwa kode tertentu selalu dijalankan.- Custom Exception memungkinkan pengembang membuat jenis exception baru yang spesifik untuk aplikasi mereka, yang membantu dalam penanganan kesalahan yang lebih terstruktur dan jelas.
Dengan menggunakan mekanisme exception handling yang tepat, Anda dapat membuat program yang lebih andal dan mudah dipelihara, serta memberikan pengalaman pengguna yang lebih baik dengan menghindari crash program yang tidak diinginkan.