1. Gambaran keseluruhan
Pengecualian Java termasuk dalam dua kategori utama: pengecualian yang dicentang dan pengecualian yang tidak dicentang . Dalam artikel ini, kami akan memberikan beberapa contoh kod mengenai cara menggunakannya.
2. Pengecualian yang diperiksa
Secara umum, pengecualian yang diperiksa mewakili kesalahan di luar kawalan program. Sebagai contoh, konstruktor FileInputStream membuang FileNotFoundException sekiranya fail input tidak wujud.
Java mengesahkan pengecualian yang diperiksa pada waktu kompilasi.
Oleh itu, kita harus menggunakan kata kunci lemparan untuk menyatakan pengecualian yang dicentang:
private static void checkedExceptionWithThrows() throws FileNotFoundException { File file = new File("not_existing_file.txt"); FileInputStream stream = new FileInputStream(file); }
Kami juga dapat menggunakan blok cubaan untuk menangani pengecualian yang diperiksa:
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 biasa yang diperiksa di Java adalah IOException , SQLException , dan ParseException .
The Pengecualian kelas adalah superclass pengecualian diperiksa. Oleh itu, kita dapat membuat pengecualian diperiksa khas dengan memperluas Pengecualian :
public class IncorrectFileNameException extends Exception { public IncorrectFileNameException(String errorMessage) { super(errorMessage); } }
3. Pengecualian yang tidak dicentang
Sekiranya program melontarkan pengecualian yang tidak dicentang, ini menunjukkan beberapa kesalahan dalam logik program. Sebagai contoh, jika kita membahagi nombor dengan 0, Java akan membuang ArithmeticException :
private static void divideByZero() { int numerator = 1; int denominator = 0; int result = numerator / denominator; }
Java tidak mengesahkan pengecualian yang tidak dicentang pada waktu kompilasi. Lebih jauh lagi, kita tidak perlu menyatakan pengecualian yang tidak dicentang dalam kaedah dengan kata kunci lemparan . Dan walaupun kod di atas tidak mempunyai kesilapan semasa waktu kompilasi, ia akan membuang ArithmeticException pada waktu runtime.
Beberapa pengecualian biasa yang tidak dicentang di Java adalah NullPointerException , ArrayIndexOutOfBoundsException , dan IllegalArgumentException .
The RuntimeException kelas adalah superclass semua pengecualian tidak terkawal. Oleh itu, kita dapat membuat pengecualian yang tidak dicentang khusus dengan memperluas RuntimeException :
public class NullOrEmptyException extends RuntimeException { public NullOrEmptyException(String errorMessage) { super(errorMessage); } }
4. Bilakah Menggunakan Pengecualian yang Diperiksa dan Pengecualian yang Tidak Diperiksa
Adalah praktik yang baik untuk menggunakan pengecualian di Java sehingga kita dapat memisahkan kod pengendalian ralat dari kod biasa. Walau bagaimanapun, kita perlu memutuskan jenis pengecualian yang hendak dilemparkan. Dokumentasi Oracle Java memberikan panduan mengenai kapan menggunakan pengecualian yang diperiksa dan pengecualian yang tidak dicentang:
"Sekiranya pelanggan diharapkan dapat pulih dari pengecualian, jadikannya pengecualian yang diperiksa. Sekiranya pelanggan tidak dapat melakukan apa-apa untuk pulih dari pengecualian, buatlah pengecualian yang tidak dicentang. "
Sebagai contoh, sebelum kita membuka fail, kita terlebih dahulu dapat mengesahkan nama fail input. Sekiranya nama fail input pengguna tidak sah, kami boleh membuang pengecualian yang diperiksa khas:
if (!isCorrectFileName(fileName)) { throw new IncorrectFileNameException("Incorrect filename : " + fileName ); }
Dengan cara ini, kita dapat memulihkan sistem dengan menerima nama fail input pengguna yang lain. Namun, jika nama fail input adalah penunjuk nol atau string kosong, ini bermaksud bahawa kita mempunyai beberapa kesalahan dalam kod. Dalam kes ini, kita harus membuang pengecualian yang tidak dicentang:
if (fileName == null || fileName.isEmpty()) { throw new NullOrEmptyException("The filename is null or empty."); }
5. Kesimpulan
Dalam artikel ini, kami membincangkan perbezaan antara pengecualian yang dicentang dan tidak dicentang. Kami juga memberikan beberapa contoh kod untuk menunjukkan kapan menggunakan pengecualian yang dicentang atau tidak dicentang.
Seperti biasa, semua kod yang terdapat dalam artikel ini boleh didapati di GitHub.