Buat Pengecualian Kustom di Java

1. Perkenalan

Dalam tutorial ini, kami akan membahas cara membuat pengecualian khusus di Java .

Kami akan menunjukkan bagaimana pengecualian yang ditentukan pengguna diterapkan dan digunakan untuk pengecualian yang dicentang dan yang tidak dicentang.

2. Perlunya Pengecualian Kustom

Pengecualian Java mencakup hampir semua pengecualian umum yang pasti terjadi dalam pemrograman.

Namun, terkadang kami perlu melengkapi pengecualian standar ini dengan pengecualian kami sendiri.

Alasan utama memperkenalkan pengecualian khusus adalah:

  • Pengecualian logika bisnis - Pengecualian yang dikhususkan untuk logika bisnis dan alur kerja. Ini membantu pengguna aplikasi atau pengembang memahami apa masalah sebenarnya
  • Untuk menangkap dan memberikan perlakuan khusus pada subset dari pengecualian Java yang ada

Pengecualian Java dapat dicentang dan dihapus centangnya. Di bagian selanjutnya, kami akan membahas kedua kasus ini.

3. Pengecualian yang Dicentang Khusus

Pengecualian yang dicentang adalah pengecualian yang perlu diperlakukan secara eksplisit.

Mari kita pertimbangkan sepotong kode yang mengembalikan baris pertama file:

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) return file.nextLine(); } catch(FileNotFoundException e) { // Logging, etc } 

Kode di atas adalah cara klasik untuk menangani pengecualian yang dicentang pada Java. Meskipun kode menampilkan FileNotFoundException, penyebab pastinya tidak jelas - apakah file tidak ada atau nama file tidak valid.

Untuk membuat pengecualian khusus, kita harus memperluas kelas java.lang.Exception .

Mari kita lihat contohnya dengan membuat pengecualian centang khusus yang disebut IncorrectFileNameException:

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

Perhatikan bahwa kita juga harus menyediakan konstruktor yang mengambil String sebagai pesan kesalahan dan memanggil konstruktor kelas induk.

Ini semua yang perlu kita lakukan untuk menentukan pengecualian khusus.

Selanjutnya, mari kita lihat bagaimana kita dapat menggunakan pengecualian khusus dalam contoh kita:

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) return file.nextLine(); } catch (FileNotFoundException e) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); } //... } 

Kami telah membuat dan menggunakan pengecualian khusus, sehingga pengguna sekarang dapat mengetahui apa persisnya pengecualian itu. Apa ini cukup? Akibatnya, kami kehilangan akar penyebab pengecualian .

Untuk memperbaikinya, kita juga dapat menambahkan parameter java.lang.Throwable ke konstruktor. Dengan cara ini, kita bisa meneruskan pengecualian root ke pemanggilan metode:

public IncorrectFileNameException(String errorMessage, Throwable err) { super(errorMessage, err); } 

Sekarang, IncorrectFileNameException digunakan bersama dengan akar penyebab pengecualian seperti ini:

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) { return file.nextLine(); } } catch (FileNotFoundException err) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException( "Incorrect filename : " + fileName , err); } // ... } 

Inilah cara kami menggunakan pengecualian khusus tanpa kehilangan akar penyebab terjadinya pengecualian tersebut .

4. Pengecualian Kustom yang Tidak Dicentang

Dalam contoh yang sama, mari kita asumsikan bahwa kita memerlukan pengecualian khusus jika nama file tidak berisi ekstensi apa pun.

Dalam kasus ini, kita memerlukan pengecualian khusus yang tidak dicentang yang mirip dengan yang sebelumnya, karena kesalahan ini hanya akan terdeteksi selama waktu proses.

Untuk membuat pengecualian khusus yang tidak dicentang, kita perlu memperluas kelas java.lang.RuntimeException :

public class IncorrectFileExtensionException extends RuntimeException { public IncorrectFileExtensionException(String errorMessage, Throwable err) { super(errorMessage, err); } } 

Karenanya, kita dapat menggunakan pengecualian khusus yang tidak dicentang ini dalam contoh kita:

try (Scanner file = new Scanner(new File(fileName))) { if (file.hasNextLine()) { return file.nextLine(); } else { throw new IllegalArgumentException("Non readable file"); } } catch (FileNotFoundException err) { if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException( "Incorrect filename : " + fileName , err); } //... } catch(IllegalArgumentException err) { if(!containsExtension(fileName)) { throw new IncorrectFileExtensionException( "Filename does not contain extension : " + fileName, err); } //... } 

5. Kesimpulan

Pengecualian khusus sangat berguna ketika kita perlu menangani pengecualian tertentu yang terkait dengan logika bisnis. Saat digunakan dengan benar, mereka dapat berfungsi sebagai alat yang berguna untuk penanganan pengecualian dan logging yang lebih baik.

Kode untuk contoh yang digunakan dalam artikel ini tersedia di Github.