Pengecualian yang Dicentang dan Tidak Dicentang di Java

1. Ikhtisar

Pengecualian Java terbagi dalam dua kategori utama: pengecualian yang dicentang dan pengecualian yang tidak dicentang . Di artikel ini, kami akan memberikan beberapa contoh kode tentang cara menggunakannya.

2. Pengecualian yang Diperiksa

Secara umum, pengecualian yang dicentang mewakili kesalahan di luar kendali program. Misalnya, konstruktor FileInputStream akan menampilkan FileNotFoundException jika file masukan tidak ada.

Java memverifikasi pengecualian yang dicentang pada waktu kompilasi.

Oleh karena itu, kita harus menggunakan kata kunci throws untuk menyatakan pengecualian yang dicentang:

private static void checkedExceptionWithThrows() throws FileNotFoundException { File file = new File("not_existing_file.txt"); FileInputStream stream = new FileInputStream(file); }

Kita juga bisa menggunakan blok coba-tangkap untuk menangani pengecualian yang dicentang:

private static void checkedExceptionWithTryCatch() { File file = new File("not_existing_file.txt"); try { FileInputStream stream = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); } }

Beberapa pengecualian umum yang diperiksa di Java adalah IOException , SQLException , dan ParseException .

Kelas Exception adalah superclass dari pengecualian yang dicentang. Oleh karena itu, kita dapat membuat pengecualian yang dicentang khusus dengan memperluas Exception :

public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } } 

3. Pengecualian yang Tidak Dicentang

Jika sebuah program melontarkan pengecualian yang tidak dicentang, itu mencerminkan beberapa kesalahan di dalam logika program. Misalnya, jika kita membagi angka dengan 0, Java akan menampilkan ArithmeticException :

private static void divideByZero() { int numerator = 1; int denominator = 0; int result = numerator / denominator; } 

Java tidak memverifikasi pengecualian yang tidak dicentang pada waktu kompilasi. Selanjutnya, kita tidak perlu mendeklarasikan pengecualian yang tidak dicentang dalam metode dengan kata kunci throws . Dan meskipun kode di atas tidak memiliki kesalahan apa pun selama waktu kompilasi, ia akan menampilkan ArithmeticException saat runtime.

Beberapa pengecualian umum yang tidak dicentang di Java adalah NullPointerException , ArrayIndexOutOfBoundsException , dan IllegalArgumentException .

Kelas RuntimeException adalah kelas super dari semua pengecualian yang tidak dicentang. Oleh karena itu, kita dapat membuat pengecualian khusus yang tidak dicentang dengan memperluas RuntimeException :

public class NullOrEmptyException extends RuntimeException { public NullOrEmptyException(String errorMessage) { super(errorMessage); } }

4. Kapan Menggunakan Pengecualian yang Dicentang dan Pengecualian yang Tidak Dicentang

Merupakan praktik yang baik untuk menggunakan pengecualian di Java sehingga kami dapat memisahkan kode penanganan kesalahan dari kode biasa. Namun, kita perlu memutuskan jenis pengecualian mana yang akan dilempar. Dokumentasi Oracle Java memberikan panduan tentang kapan harus menggunakan pengecualian yang dicentang dan pengecualian yang tidak dicentang:

“Jika klien cukup diharapkan untuk pulih dari pengecualian, jadikan itu pengecualian yang dicentang. Jika klien tidak dapat melakukan apa pun untuk memulihkan dari pengecualian, jadikan itu sebagai pengecualian yang tidak dicentang. ”

Misalnya, sebelum kita membuka file, kita bisa memvalidasi dulu nama file yang dimasukkan. Jika nama file masukan pengguna tidak valid, kita dapat menampilkan pengecualian yang dicentang khusus:

if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } 

Dengan cara ini, kami dapat memulihkan sistem dengan menerima nama file masukan pengguna lain. Namun, jika nama file input adalah pointer nol atau string kosong, itu berarti kami memiliki beberapa kesalahan dalam kode. Dalam kasus ini, kita harus membuang pengecualian yang tidak dicentang:

if (fileName == null || fileName.isEmpty()) { throw new NullOrEmptyException("The filename is null or empty."); } 

5. Kesimpulan

Pada artikel ini, kita membahas perbedaan antara pengecualian yang dicentang dan yang tidak dicentang. Kami juga menyediakan beberapa contoh kode untuk menunjukkan kapan menggunakan pengecualian yang dicentang atau tidak dicentang.

Seperti biasa, semua kode yang ditemukan dalam artikel ini dapat ditemukan di GitHub.