(I) Pengecualian hierarki java
Untuk memahami perbedaan antara pengecualian yang diperiksa dan pengecualian yang tidak terkendali di Java, mari kita lihat hirarki pengecualian Java.
Ini adalah diagram hierarki pengecualian Java yang disederhanakan. Perlu dicatat bahwa semua kelas diwarisi dari yang dapat dilempar, dan lapisan berikutnya dibagi menjadi dua struktur, kesalahan dan pengecualian. Level kelas kesalahan menjelaskan kesalahan internal dan kesalahan kelelahan sumber daya dalam sistem runtime Java. Selain hanya melaporkan kesalahan ini kepada pengguna dan berusaha mencegah program dari diakhiri dengan aman, umumnya ada solusi lain.
(Ii) Perbedaan antara pengecualian yang tidak dicentang dan pengecualian yang diperiksa
Setelah memahami hal -hal di atas, mari kita lihat apa yang diperiksa pengecualian dan apa yang tidak diperiksa. Bahkan, spesifikasi bahasa Java mendefinisikan keduanya sangat sederhana. Pengecualian yang berasal dari kesalahan atau runimeException disebut pengecualian yang tidak dicentang, dan semua pengecualian lainnya menjadi pengecualian yang diperiksa . Meskipun definisi ini sangat sederhana, RuntimeException adalah konsep yang sangat membingungkan. Tampaknya semua pengecualian kami sedang dalam proses menjalankan program. Penjelasan saya tentang ru ntimeexception di Java yang efektif tidak begitu memuaskan.
Gunakan pengecualian yang diperiksa untuk kondisi yang dapat dipulihkan dan pengecualian runtime untuk kesalahan pemrograman (item 58 dalam edisi ke -2)
Namun, dari kalimat ini, kita dapat dengan mudah memperpanjangnya, yaitu, jika runtimeException terjadi, itu harus menjadi masalah bagi programmer sendiri. Misalnya, subskrip array di luar batas dan mengakses pengecualian pointer nol, dll. Selama Anda memberi sedikit perhatian, pengecualian ini adalah pengecualian yang dapat dihindari dalam tahap penyandian. Jika Anda masih berpikir kedua konsep ini sulit dibedakan, maka metode "paling kejam" adalah untuk menghafal runtimeException umum, yang dapat menghemat banyak waktu untuk menilai.
(Iii) Mengapa kita harus membedakan antara pengecualian yang tidak dicentang dan pengecualian yang diperiksa?
Alasannya sebenarnya sangat sederhana. Kompiler akan memeriksa apakah Anda memberikan mekanisme penanganan pengecualian untuk semua pengecualian yang diperiksa. Misalnya, ketika kita menggunakan class.forname () untuk menemukan objek kelas dari string yang diberikan, jika penanganan pengecualian tidak disediakan untuk metode ini, kompilasi tidak akan diteruskan.
(Iv) Pengecualian apa yang harus kami nyatakan?
Seperti yang kami katakan sebelumnya, RunimeException adalah kesalahan yang dapat dihindari selama proses pemrograman. Jadi, apakah kita tidak perlu membuang pengecualian ini? Pada prinsipnya, ini benar, tetapi spesifikasi Java tidak membatasi ini. Tampaknya Anda membuang array dari batas dan tidak ada signifikansi praktis, dan sebaliknya, itu akan menyebabkan kerugian kinerja tertentu. Jadi bagaimana kita harus merancang pengecualian lemparan? Kita perlu ingat bahwa dua situasi berikut diperlukan untuk menyatakan pengecualian lemparan:
Panggil metode pengecualian yang diperiksa, seperti IoException. Adapun alasannya, kita telah membahas sebelumnya, jika semua pengecualian diperiksa dilemparkan, itu tidak dapat dikompilasi. Kesalahan ditemukan selama program berjalan dan pengecualian dilemparkan menggunakan pernyataan lemparan. Untuk pengecualian yang tidak dicentang, hanya ada dua situasi utama: baik dapat dihindari (pengecualian runtime) atau tidak terkendali. Ini juga membutuhkan deklarasi pengecualian.
Berikut adalah contoh untuk menggambarkan hal -hal canggung yang disebutkan dalam catatan 2 di atas:
Pertama, tentukan genericException kelas pengecualian dasar, diwarisi dari pengecualian.
Paket check_unchecked_exceptions; kelas publik genericexception memperluas pengecualian { / ** * * / private static final long serialversionuid = 2778045265121433720l; public genericeexception () {} public genericexception (string msg) {super (msg); }} Berikut ini mendefinisikan kelas uji VerifyException.
Paket check_unchecked_exceptions; kelas publik VerifyException {public void first () melempar genericException {throw new genericexception ("checked exception"); } public void kedua (string msg) {if (msg == null) {lempar nullPointerException baru ("Exception Uncecked"); }} public void ketiga () melempar genericeexception {first (); } public static void main (string [] args) {verifyException ve = new verifyException (); coba {ve.first (); } catch (genericexception e) {e.printstacktrace (); } ve.second (null); }}Setelah berjalan, dapatkan informasi berikut tentang konsol Eclipse:
check_unchecked_Exceptions.genericException: pengecualian diperiksa
di check_unchecked_exceptions.VerifyException.first (verifyException.java:6)
di check_unchecked_exceptions.VerifyException.main (verifyException.java:23)
Pengecualian di Thread "Main" java.lang.nullpointerexception: Pengecualian yang tidak dicentang
di check_unchecked_exceptions.VerifyException.second (verifyException.java:11)
di check_unchecked_exceptions.VerifyException.main (verifyException.java:29)
Dalam contoh di atas, dikombinasikan dengan konsep -konsep diperiksa dan tidak dicentang, dapat dilihat bahwa pengecualian kelas induk adalah tipe yang diperiksa, tetapi subkelasnya runtimeexception (subclass nullpointerException) tidak dicentang.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.