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
.Throwable
memiliki 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-catch
atau 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
.
try
Block: Tempatkan kode yang mungkin menyebabkan exception dalam blok ini.catch
Block: Menangkap dan menangani exception yang dilempar olehtry
block.finally
Block: 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
try
mencoba mengakses elemen ke-4 dari array yang hanya memiliki 3 elemen, yang menyebabkanArrayIndexOutOfBoundsException
. - Blok
catch
menangkap 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
try
block mencoba melakukan pembagian dengan nol, yang menyebabkanArithmeticException
. - Blok
catch
menangani exception ini dengan mencetak pesan. - Blok
finally
selalu 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
bacaFile
dideklarasikan untuk melemparIOException
menggunakan keywordthrows
. - Di dalam
main
method,bacaFile
dipanggil di dalamtry-catch
block. Jika file tidak ditemukan atau terjadi kesalahan I/O,IOException
akan ditangkap olehcatch
block.
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:
InvalidAgeException
adalah custom exception yang mewarisiException
.- Jika
umur
kurang dari 18, custom exception dilempar dengan pesan kesalahan yang sesuai. - Exception ini kemudian ditangkap di
main
method 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-finally
digunakan 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.