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
466 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!

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