Pengecualian Tidak Dilaporkan: Maksud dan Penyelesaian
Pengaturcara Java sering menghadapi ralat yang dirangka seperti berikut:
"ralat: pengecualian tidak dilaporkan dengan XXX ialah nama beberapa kelas pengecualian."
Maksud dan Java Konsep
Ralat ini menandakan bahawa:
- Kod sedang melontar atau menyebarkan pengecualian yang ditandakan (XXX).
- Pengecualian tidak dikendalikan dengan betul dengan menangkapnya atau mengisytiharkannya seperti yang dikehendaki oleh Java.
Penyelesaian
Untuk menyelesaikan isu ini, anda mempunyai dua pilihan:
-
Tangkap Pengecualian: Gunakan try ... catch block untuk mengendalikan pengecualian dalam arus kaedah.
-
Isytiharkan bahawa Kaedah Melemparkan Pengecualian: Tambahkan kata kunci lontaran diikuti dengan nama pengecualian dalam kaedah atau tandatangan pembina untuk menyerahkan tanggungjawab pengendalian pengecualian kepada pemanggil.
Pengecualian Disemak vs Tidak Disemak
Jawa mengelaskan pengecualian kepada dua jenis:
-
Pengecualian yang Ditanda: Boleh Dibuang, Pengecualian (dan subkelas), tidak termasuk RuntimeException dan subkelasnya.
-
Pengecualian Tidak Ditanda: Ralat (dan subkelas), RuntimeException (dan subkelas).
Pengecualian yang disemak memerlukan pengendalian yang jelas, manakala pengecualian yang tidak ditandai tidak.
Contoh: Membaling dan Menangkap dalam Kaedah Yang Sama
static void t() throws IllegalAccessException {
try {
throw new IllegalAccessException("demo");
} catch (IllegalAccessException e) {
System.out.println(e);
}
}
Dalam contoh ini, kaedah t melemparkan pengecualian, tetapi ia juga ditangkap dan dikendalikan dalam kaedah yang sama. Oleh itu, pengisytiharan lontaran dalam tandatangan harus dialih keluar.
Amalan Buruk dengan Pengecualian
Elakkan amalan buruk berikut:
-
Catching Exception (atau Throwable): Tangkap pengecualian khusus sebaliknya untuk mengelakkan yang tidak diingini pengendalian.
-
Mengisytiharkan Kaedah sebagai Pengecualian Lontar: Elakkan memaksa pemanggil untuk mengendalikan kemungkinan sebarang pengecualian yang diperiksa.
-
Pengecualian Meremuk: Jangan abaikan pengecualian kerana mereka boleh membuat ralat masa jalan lebih sukar diagnosis.
Kes Khas
-
Pemula Statik: Isytiharkan pembolehubah statik yang melontarkan pengecualian yang ditandai dalam blok statik dan bukannya pengisytiharan medan.
-
Blok Statik: Pengecualian yang ditangkap dalam blok statik mesti dikendalikan di dalam blok kerana tiada penutup konteks.
-
Lambdas: Lambdas tidak boleh membuang pengecualian yang tidak ditandai kerana keperluan antara muka fungsi. Mengendalikan pengecualian dalam lambda itu sendiri.
-
Dua Pengecualian dengan Nama Yang Sama: Jika pengkompil melaporkan ralat "pengecualian tidak dilaporkan" walaupun terdapat kata kunci lontaran, semak sama ada nama pengecualian mempunyai berbeza nama yang layak sepenuhnya, menunjukkan pengecualian yang berbeza.
Selanjutnya Maklumat
Rujuk sumber berikut untuk mendapatkan maklumat terperinci tentang pengecualian Java:
- [Tutorial Java Oracle: Keperluan tangkapan atau nyatakan](https://docs.oracle .com/javase/tutorial/essential/exceptions/catchOrDeclare.html)
- [Menangkap dan mengendalikan pengecualian](https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html)
- [Menentukan pengecualian yang dilemparkan oleh kaedah](https://docs.oracle.com /javase/tutorial/essential/exceptions/throwing.html)
Atas ialah kandungan terperinci Apakah punca dan penyelesaian untuk ralat 'Pengecualian Tidak Dilaporkan' di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn