Rumah > Java > javaTutorial > Mengapa saya mendapat 'ralat: pengecualian tidak dilaporkan ; mesti ditangkap atau diisytiharkan untuk dibuang' di Jawa?

Mengapa saya mendapat 'ralat: pengecualian tidak dilaporkan ; mesti ditangkap atau diisytiharkan untuk dibuang' di Jawa?

Mary-Kate Olsen
Lepaskan: 2024-12-23 08:24:13
asal
360 orang telah melayarinya

Why am I getting the

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan