Menyingkap Enigma: "error: unreported exception" dalam Java
Menemui rahsia "error: unreported exception ; mesti ditangkap atau diisytiharkan dibuang" mesej? Jangan risau; memahami ralat kompilasi ini akan menerangkan konsep Java dan membimbing anda ke arah menyelesaikannya.
Merungkai mesej ralat:
Ralat menandakan bahawa kod anda telah membuang atau menyebarkan menyemak pengecualian menamakan XXX dan gagal mengendalikannya dengan sewajarnya.
Konsep di sebalik ralat:
Java mengelaskan pengecualian kepada dua jenis:
-
Pengecualian yang disemak: Diperoleh daripada java.lang.Throwable dan Exception, tidak termasuk RuntimeException dan subkelasnya, pengecualian ini mesti ditangani dalam kaedah lampiran atau pembinanya.
-
Pengecualian yang tidak ditandai: Terdiri daripada Ralat dan subkelasnya serta RuntimeException dan subkelasnya, pengecualian yang tidak ditandai tidak perlu dikendalikan secara eksplisit.
Menyelesaikan isu:
Untuk menangani ralat, anda mesti mengendalikan pengecualian yang disemak dalam kod dengan sama ada:
-
Menangkap dan mengendalikan pengecualian: Melampirkan pernyataan yang mencetuskan pengecualian dalam try ... catch block, seperti yang digambarkan dalam sampel kod di bawah:
try {
// Code that may throw the checked exception
if (someFlag) {
throw new IOException("cannot read something");
}
// Subsequent code
} catch (IOException ex) {
// Handle the exception gracefully
}
Salin selepas log masuk
-
Mengisytiharkan bahawa kaedah yang disertakan atau pembina membuang pengecualian: Dengan menambahkan klausa lontaran XXX pada kaedah atau perisytiharan pembina, anda mewakilkan tanggungjawab mengendalikan pengecualian kepada pemanggil kaedah atau pembina. Di bawah ialah contoh:
public void doThings() throws IOException {
// Code that may throw an IOException
if (someFlag) {
throw new IOException("cannot read something");
}
// Subsequent code
}
Salin selepas log masuk
Membuat pilihan yang tepat:
Pendekatan yang betul bergantung pada konteks dan pengendalian yang dikehendaki bagi pengecualian dalam anda kod. Pertimbangkan tahap keterukan dan keupayaan untuk pulih daripada pengecualian pada masa pengendalian.
Pertimbangan khas:
-
Pengasa statik: Mengendalikan pengecualian yang diperiksa dalam pemula statik memerlukan pengendalian yang teliti disebabkan oleh sekatan sintaks. Pertimbangkan untuk menggunakan blok statik sebaliknya.
-
Blok statik: Pengecualian yang diperiksa mesti ditangkap dalam blok statik kerana tiada konteks yang disertakan.
-
Lambdas: Lambdas tidak boleh membuang pengecualian yang tidak ditandai kerana antara muka fungsi yang mereka gunakan. Mengendalikan pengecualian dalam lambda itu sendiri.
-
Berbilang pengecualian: Jika nama pengecualian yang layak sepenuhnya berbeza walaupun nama yang sama, pengecualian ini berbeza. Kendalikan mereka secara individu.
Sumber tambahan:
-
Tutorial Java Oracle:
- [Keperluan tangkapan atau nyatakan](https://docs.oracle.com/javase/tutorial/essential/exceptions/catchexceptions.html#:~:text=Keperluan tangkapan atau nyatakan)
- [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 Mengapa saya mendapat 'ralat: pengecualian tidak dilaporkan ; mesti ditangkap atau diisytiharkan untuk dibuang' di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!