Artikel ini berfokus pada beberapa konsep mekanisme pengecualian di Java. Tujuan menulis artikel ini adalah untuk memfasilitasi saya untuk mengingat hal -hal ini setelah waktu yang lama.
1. Mekanisme Pengecualian
1.1 Mekanisme pengecualian mengacu pada bagaimana program menanganinya ketika kesalahan terjadi. Secara khusus, mekanisme pengecualian menyediakan saluran yang aman untuk keluar program. Ketika kesalahan terjadi, proses eksekusi program berubah dan kontrol program ditransfer ke prosesor pengecualian.
1.2 Cara tradisional untuk menangani pengecualian adalah bahwa fungsi mengembalikan hasil khusus untuk menunjukkan bahwa pengecualian terjadi (biasanya hasil khusus ini umumnya dikenal sebagai), dan program yang memanggil fungsi bertanggung jawab untuk memeriksa dan menganalisis hasil yang dikembalikan oleh fungsi. Ini memiliki kelemahan berikut: misalnya, jika fungsi mengembalikan -1, itu berarti bahwa pengecualian terjadi, tetapi jika fungsi tersebut ingin mengembalikan nilai -1 yang benar, itu akan bingung; Keterbacaan dikurangi, dan kode program dicampur dengan kode yang menangani pengecualian; Program yang memanggil fungsi menganalisis kesalahan, yang mengharuskan programmer klien memiliki pemahaman yang mendalam tentang fungsi perpustakaan.
1.3 Proses Penanganan Pengecualian
1.3.1 Ketika kesalahan ditemui, metode segera berakhir dan tidak mengembalikan nilai; Pada saat yang sama, objek pengecualian dilemparkan.
1.3.2 Program yang memanggil metode ini tidak akan terus mengeksekusi, tetapi mencari penangan pengecualian yang dapat menangani pengecualian dan menjalankan kode di dalamnya.
2 Klasifikasi Pengecualian
2.1 Klasifikasi pengecualian
2.1.1 Struktur warisan pengecualian: Kelas dasar dapat dilempar, kesalahan dan pengecualian warisan yang dapat dilempar, runtimeException dan ioException, dll., Dan runimeException spesifik mewarisi runtimeException.
2.1.2 Kesalahan dan RuntimeException dan subclass mereka menjadi pengecualian yang tidak dicentang, dan pengecualian lainnya menjadi pengecualian yang diperiksa.
2.2 Karakteristik setiap jenis pengecualian
2.2.1 Sistem Kesalahan Sistem kelas kesalahan menjelaskan kesalahan internal dan kelelahan sumber daya di sistem operasi Java. Aplikasi tidak boleh melempar objek jenis ini (biasanya dilemparkan oleh mesin virtual). Jika kesalahan seperti itu terjadi, tidak ada hal lain yang dapat dilakukan kecuali untuk mencoba membuat program keluar dengan aman. Karena itu, saat merancang pemrograman, Anda harus lebih memperhatikan sistem pengecualian.
2.2.2 Sistem Pengecualian Sistem Pengecualian Termasuk Sistem RuntimeException dan Sistem Non-RuntimeException lainnya
2.2.2.1 RuntimeException Sistem RuntimeException mencakup konversi tipe yang salah, array di luar batas akses, upaya untuk mengakses pointer nol, dll. Prinsip penanganan runtimeException adalah: jika runtimeeException terjadi, itu harus berupa kesalahan programmer. Misalnya, pengecualian akses array di luar batas dapat dihindari dengan memeriksa subskrip array dan batas array.
2.2.2.2 Pengecualian lainnya (ioException, dll.)
2.3 Perbedaan dari klasifikasi pengecualian C ++
2.3.1 Faktanya, nama kelas RuntimeException di Java tidak tepat, karena pengecualian terjadi saat runtime. (Kesalahan yang terjadi selama kompilasi bukanlah pengecualian. Dengan kata lain, pengecualian adalah untuk menyelesaikan kesalahan yang terjadi selama program menjalankan).
2.3.2 Logic_error di C ++ setara dengan runtimeException di java, sedangkan runtime_error setara dengan pengecualian tipe non-runimeException di java.
3. Cara menggunakan pengecualian
3.1 Deklarasikan Metode Melempar Pengecualian
3.1.1 Sintaks: lemparan (dihilangkan)
3.1.2 Mengapa kita perlu mendeklarasikan metode untuk melempar pengecualian? Apakah suatu metode melempar pengecualian sama pentingnya dengan jenis nilai pengembalian metode. Dengan asumsi bahwa metode tersebut melempar pengecualian, tidak menyatakan bahwa metode tersebut akan melempar pengecualian, maka programmer klien dapat memanggil metode ini tanpa menulis kode untuk menangani pengecualian. Kemudian, setelah pengecualian terjadi, tidak ada pengontrol pengecualian yang cocok untuk menyelesaikan pengecualian ini.
3.1.3 Mengapa pengecualian yang dilemparkan harus menjadi pengecualian yang diperiksa? RuntimeeException dan kesalahan dapat dihasilkan dalam kode apa pun. Mereka tidak perlu dilemparkan oleh programmer. Setelah kesalahan terjadi, pengecualian yang sesuai akan secara otomatis dilemparkan. Pengecualian yang diperiksa dilemparkan oleh programmer, yang dibagi menjadi dua situasi: programmer klien memanggil fungsi perpustakaan yang melempar pengecualian (pengecualian fungsi perpustakaan dilemparkan oleh programmer perpustakaan); Programmer klien melempar pengecualian sendiri menggunakan pernyataan lemparan. Saat menghadapi kesalahan, pemrogram umumnya tidak berdaya; Saat menghadapi runtimeException, harus ada kesalahan logis dalam program dan program perlu dimodifikasi (setara dengan metode debugging); Hanya pengecualian yang diperiksa adalah apa yang dipedulikan oleh programmer, dan program harus dan hanya boleh melempar atau menangani pengecualian yang diperiksa.
3.1.4 Catatan: Metode subkelas yang mencakup metode tertentu dari kelas induk tidak dapat melemparkan lebih banyak pengecualian daripada metode kelas induk. Oleh karena itu, kadang -kadang ketika merancang metode kelas induk, pengecualian akan dinyatakan dilemparkan, tetapi kode yang sebenarnya untuk mengimplementasikan metode ini tidak melempar pengecualian. Tujuan dari ini adalah untuk memfasilitasi metode subkelas untuk menimpa metode kelas induk.
3.2 Cara Melempar Pengecualian
3.2.1 Sintaks: Throw (dihilangkan)
3.2.2 Pengecualian apa yang dilemparkan? Untuk objek pengecualian, tipe objek benar -benar berguna ketika pengecualian adalah jenis objek, dan objek pengecualian itu sendiri tidak ada artinya. Misalnya, jika jenis objek pengecualian adalah ClassCastException, maka nama kelas ini adalah satu -satunya informasi yang berguna. Oleh karena itu, ketika memilih pengecualian mana yang akan dilemparkan, yang paling penting adalah memilih nama kelas pengecualian yang dapat dengan jelas menjelaskan situasi pengecualian.
3.2.3 Biasanya ada dua konstruktor untuk objek pengecualian: satu adalah konstruktor tanpa parameter; Yang lainnya adalah konstruktor dengan string, yang akan digunakan sebagai deskripsi tambahan untuk objek pengecualian ini selain nama jenis.
3.2.4 Buat pengecualian Anda sendiri: Ketika tidak ada pengecualian bawaan di Java tidak dapat dengan jelas menjelaskan situasi pengecualian, Anda perlu membuat pengecualian sendiri. Perlu dicatat bahwa satu -satunya hal yang berguna adalah informasi nama jenis, jadi jangan menghabiskan energi untuk desain kelas pengecualian.
3.3 Capture Exceptions Jika pengecualian tidak diproses, maka untuk program antarmuka non-grafis, program akan dibatalkan dan informasi pengecualian output; Untuk program antarmuka grafis, informasi pengecualian juga akan menjadi output, tetapi program tidak dibatalkan, tetapi kembali ke loop pemrosesan antarmuka pengguna.
3.3.1 Sintaks: Modul pengontrol coba, tangkap dan akhirnya (dihilangkan) harus segera di belakang blok coba. Jika pengecualian dilemparkan, mekanisme kontrol pengecualian akan mencari pengontrol pertama yang parameternya cocok dengan jenis pengecualian dan kemudian masukkan klausa tangkapan dan berpikir bahwa pengecualian telah dikendalikan. Pencarian untuk pengontrol juga akan berhenti setelah klausa tangkapan selesai.
3.3.1.1 Tangkap beberapa pengecualian (perhatikan sintaks dan urutan penangkapan) (dihilangkan)
3.3.1.2 Proses Penanganan Penggunaan dan Pengecualian Akhirnya (Dihilangkan)
3.3.2 Apa yang dilakukan penanganan pengecualian? Untuk Java, karena pengumpulan sampah, penanganan pengecualian tidak memerlukan daur ulang memori. Namun, masih ada beberapa sumber yang perlu dikumpulkan oleh programmer, seperti file, koneksi jaringan, dan gambar.
3.3.3 Haruskah metode melempar pengecualian atau menangkap pengecualian dalam metode ini? Prinsip: Tangkap dan tangani pengecualian yang tahu cara menangani, dan lulus pengecualian yang tidak tahu bagaimana menangani
3.3.4 Lemparkan pengecualian lagi
3.3.4.1 Mengapa saya melempar pengecualian lagi? Di level ini, hanya sebagian konten yang dapat diproses, dan beberapa pemrosesan perlu diselesaikan di lingkungan tingkat yang lebih tinggi, sehingga pengecualian harus dilemparkan lagi. Ini memungkinkan setiap tahap penangan pengecualian untuk menangani pengecualian yang dapat ditangani.
3.3.4.2 Blok tangkapan yang sesuai dengan blok percobaan yang sama akan diabaikan, dan pengecualian yang dilemparkan akan memasuki level yang lebih tinggi.
4 pertanyaan lain tentang pengecualian
4.1 Pengecualian yang terlalu sering digunakan, sangat nyaman untuk menggunakan pengecualian, sehingga pemrogram umumnya tidak lagi bersedia menulis kode untuk menangani kesalahan, tetapi cukup melemparkan pengecualian. Ini salah. Untuk kesalahan yang sepenuhnya diketahui, kode yang menangani kesalahan tersebut harus ditulis untuk meningkatkan ketahanan program. Selain itu, efisiensi mekanisme abnormal sangat buruk.
4.2 Membagi pengecualian dari kesalahan biasa. Untuk kesalahan biasa, kode yang menangani kesalahan tersebut harus ditulis untuk meningkatkan ketahanan program. Pengecualian diperlukan hanya untuk kesalahan runtime eksternal yang tidak dapat ditentukan dan diprediksi.
4.3 Informasi yang terkandung dalam objek pengecualian secara umum, satu -satunya informasi berguna untuk objek pengecualian adalah informasi tipe. Tetapi saat menggunakan konstruktor string pengecualian, string ini juga dapat digunakan sebagai informasi tambahan. Memanggil metode getMessage (), tostring () atau printStackTrace () dari objek pengecualian dapat memperoleh informasi tambahan, nama kelas, dan informasi tumpukan masing -masing. Dan yang terakhir berisi informasi yang merupakan superset dari yang pertama.
Pengecualian yang umum digunakan:
Operasi yang tidak didukung oleh UnportedOperationException
Parameter ilegal ilegalargumentsception
IndexOutOfBoundSException Index Outbound
IlegalStateException Illegal State
Ada perbedaan tertentu antara peringatan abnormal dan biasa. Ketika pengecualian terjadi dalam aplikasi, aliran normal instruksi dari program pelaksanaan akan terganggu. Dengan kata lain, kode setelah pengecualian terjadi tidak akan dieksekusi dengan benar. Bahkan memicu operasi rollback database.
Di platform pengembangan Java, pengecualian termasuk pengecualian yang telah ditentukan dan pengecualian khusus. Dua jenis pengecualian ini saling melengkapi. Sebagai pengembang program yang memenuhi syarat, berbuatnya menggunakan pengecualian dalam aplikasi. Ini dapat meningkatkan interaktivitas aplikasi. Pada saat yang sama, ini juga merupakan prasyarat untuk memastikan operasi normal aplikasi. Oleh karena itu, penanganan pengecualian sangat penting untuk mengembangkan aplikasi yang sangat baik. Untuk alasan ini, penulis percaya bahwa pengembang program harus memiliki pemahaman mendalam tentang pengecualian umum dalam aplikasi Java. Hanya ketika Anda memahami pengecualian umum ini, Anda dapat menangani pengecualian khusus dengan baik.
1. Jenis dan penyebab pengecualian umum.
Mengenai pengecualian umum dalam aplikasi Java, penulis percaya bahwa pengembang program harus memahaminya dari dua aspek. Pertama, kita perlu tahu pengecualian aplikasi Java apa yang ada di sana, dan kedua, kita perlu tahu penyebab apa yang dapat menyebabkan pengecualian ini. Ini tidak hanya mengharuskan manajer program untuk memperhatikan akumulasi dalam pekerjaan sehari -hari mereka, tetapi juga perlu mengumpulkan informasi dari saluran lain jika perlu. Penulis akan melakukan analisis tentang hal ini, berharap itu akan membantu semua pengembang program.
1. SQlexception: Operate Database Exception Class.
Sebagian besar aplikasi Java hari ini bergantung pada database untuk dijalankan. Kelas ini akan dipicu jika terjadi kesalahan ketika aplikasi Java berkomunikasi dengan database. Pada saat yang sama, informasi kesalahan database akan ditampilkan kepada pengguna melalui kelas ini. Dengan kata lain, kelas pengecualian basis data operasi ini adalah jembatan untuk transmisi informasi pengecualian antara database dan pengguna. Misalnya, pengguna sekarang memasukkan data ke dalam sistem, dan menetapkan bahwa bidang tertentu harus unik dalam database. Ketika pengguna memasukkan data, jika nilai bidang ini diulangi dengan catatan yang ada, itu melanggar batasan keunikan database, dan pesan pengecualian akan dirilis dari database. Informasi ini mungkin tidak terlihat oleh pengguna karena terjadi di tingkat database. Pada saat ini, kelas pengecualian basis data operasi ini akan menangkap informasi pengecualian database dan meneruskan informasi pengecualian ke latar depan. Dengan cara ini, pengguna meja depan dapat menganalisis penyebab kesalahan berdasarkan informasi pengecualian ini. Ini adalah tujuan utama dari kelas pengecualian basis data operasi ini. Dalam aplikasi Java, kelas ini akan dipicu ketika semua operasi basis data terjadi pengecualian. Semua informasi cepat dari aplikasi Java itu sendiri sering terlalu umum pada saat ini, hanya mengatakan bahwa ada kesalahan dalam interaksi dengan database dan tidak memiliki banyak nilai referensi. Pada saat ini, informasi prompt database lebih berharga.
2. ClasscastException: Pengecualian Konversi Jenis Data.
Dalam aplikasi Java, terkadang tipe data perlu dikonversi. Konversi ini mencakup konversi yang ditampilkan dan konversi implisit. Namun, tidak peduli bagaimana Anda mengonversi, Anda harus memenuhi prasyarat, yaitu kompatibilitas tipe data. Jika prinsip ini dilanggar selama proses konversi data, pengecualian konversi tipe data akan dipicu. Misalnya, dalam aplikasi sekarang, pengembang perlu mengonversi data tanggal tipe karakter menjadi data tipe tanggal yang dapat diterima oleh database. Pada saat ini, mereka hanya perlu mengendalikannya di aplikasi latar depan, dan umumnya tidak akan ada masalah. Namun, jika aplikasi latar depan tidak memiliki kontrol yang relevan, seperti pengguna hanya memasukkan informasi bulan dan hari saat memasuki tanggal, tetapi tidak memiliki informasi tahun. Pada saat ini, pengecualian akan muncul ketika aplikasi melakukan konversi tipe data. Menurut pengalaman saya, pengecualian konversi tipe data menyebabkan lebih banyak pengecualian terjadi dalam pengembangan aplikasi, dan juga merupakan pengecualian tingkat rendah. Karena dalam kebanyakan kasus, beberapa kontrol paksa atas tipe data dapat dilakukan di jendela aplikasi. Artinya, sebelum tipe data dikonversi, kompatibilitas tipe data dipastikan. Dalam hal ini, tidak akan mudah untuk menyebabkan pengecualian konversi tipe data. Jika dalam bidang yang hanya memungkinkan tipe numerik, dimungkinkan untuk mengatur karakter selain nilai numerik yang tidak diizinkan untuk masuk. Meskipun dengan mekanisme penanganan pengecualian, aplikasi tidak akan dijalankan secara tidak benar. Namun, dalam perkembangan aktual, kita masih harus memperkirakan sebanyak mungkin penyebab kesalahan dan mencoba menghindari kelainan.
3. NumberFormateException: Pengecualian yang dilemparkan saat string dikonversi ke tipe numerik.
Selama proses konversi tipe data, jika itu adalah masalah yang terjadi selama proses konversi karakter menjadi konversi numerik, pengecualian independen digunakan dalam program Java, yaitu NumberFormateException. Misalnya, ketika data tipe karakter "123456" dikonversi menjadi data numerik, diizinkan. Namun, jika data jenis karakter berisi karakter non-numerik, seperti 123#56, pengecualian akan muncul ketika dikonversi menjadi tipe numerik. Sistem akan menangkap pengecualian ini dan memprosesnya.
Ada banyak kelas pengecualian umum dalam aplikasi Java. Jika pengecualian kelas yang sesuai tidak ditemukan, beberapa pengecualian kelas tidak diperbolehkan diakses, file telah mengakhiri pengecualian, file belum menemukan pengecualian, bidang belum menemukan pengecualian, dll. Umumnya, pengembang sistem dapat menilai jenis pengecualian saat ini berdasarkan nama pengecualian ini. Meskipun bagus, kenangan yang baik tidak sebagus pena yang buruk. Bila perlu (terutama ketika ada pengecualian khusus), pengembang program akhirnya memiliki daftar pengecualian. Dalam hal ini, apakah aplikasi menemukan masalah selama debugging atau menerima keluhan dari pengguna selama operasi, Anda dapat menemukan penyebab pengecualian berdasarkan nama pengecualian dalam waktu. Ini memungkinkan pengecualian untuk diselesaikan dalam waktu terpendek dan mengembalikan operasi normal aplikasi. Ukuran ini telah digunakan selama bertahun -tahun dan sangat efektif.
2. Saran praktis untuk manajemen pengecualian.
Untuk pengecualian basis data operasi, aplikasi Java hanya menyediakan satu kelas pengecualian. Oleh karena itu, hanya mengandalkan informasi kesalahan aplikasi Java seringkali tidak dapat membantu personel aplikasi menghilangkan penyebab kesalahan. Anda hanya dapat menentukan apakah pengecualian ini disebabkan oleh kesalahan aplikasi atau kesalahan database. Untuk lebih menentukan penyebab masalah, yang terbaik adalah menjelaskan penyebab spesifik ketika mendefinisikan pengecualian pada tingkat database. Misalnya, aplikasi latar depan dapat menghubungi fungsi atau prosedur basis data. Pada saat ini, melakukan pekerjaan yang baik dalam fungsi atau proses database dapat menjelaskan penyebab spesifik dari pengecualian tertentu. Misalnya, ketika menghasilkan tabel lain berdasarkan tabel dasar tertentu, bidang tertentu tidak dapat kosong, dll. Setelah menjelaskan informasi pengecualian ini dengan jelas, jika Anda benar-benar menemukan pengecualian yang sama, mengoperasikan kelas pengecualian basis data akan membalikkan informasi pengecualian database kepada pengguna front-end. Ini akan membantu pengguna menemukan penyebab masalah dan memperbaikinya dalam waktu terpendek. Tentu saja, ini membutuhkan koordinasi antara pemrogram Java dan perancang basis data.
Kedua, perlu dicatat bahwa pengecualian bukanlah norma. Dengan kata lain, sebagian besar kelainan dapat dieliminasi melalui pandangan jauh ke depan dan pencegahan premis. Jika dirancang untuk operasi empat poin, Anda dapat membatasi memasukkan 0 nilai di bidang ex-number di jendela aplikasi latar depan untuk menghilangkan kemungkinan pengecualian selama operasi aplikasi. Namun, ini sering membutuhkan pengembang aplikasi untuk memiliki pengalaman kerja yang kaya dan memiliki logika pemikiran yang ketat. Meskipun ini sulit, penulis percaya bahwa pengembang program harus tetap bekerja keras dalam hal ini, daripada selalu membiarkan pengguna sebagai kesaksian Anda untuk membiarkan pengguna menemukan bug desain dalam aplikasi. Penulis percaya bahwa pengecualian diizinkan untuk dilemparkan hanya ketika beberapa faktor yang benar -benar di luar kendali programmer. Jika pengembang aplikasi dapat menyadari kesalahan ini, tetapi masih tidak memperhatikannya atau mengambil langkah -langkah efektif untuk mencegah kelainan ini, maka penulis tidak akan mengizinkannya.
ArithmeticException (Exception with divisor 0), BufferOverflowException (Buffer overflow exception), BufferUnderflowException (Buffer underflow exception), IndexOutOfBoundsException (Outbounds exception), NullPointerException (NullPointerException), EmptyStackException (Empty Stack Exception), IllegalArgumentException (Illegal Parameter Exception), NegativearraysizeException, NosuchelementException, SecurityException, SystemException, UndeclaredThrowableException
1. Java.lang.nullpointerexception
Penjelasan pengecualian adalah "program bertemu penunjuk nol". Sederhananya, itu berarti memanggil objek yang tidak diinisialisasi atau objek yang tidak ada, yaitu, membingungkan inisialisasi array dengan inisialisasi elemen array. Inisialisasi array adalah untuk mengalokasikan ruang yang diperlukan untuk array. Elemen dalam array yang diinisialisasi tidak dipakai dan masih kosong, sehingga setiap elemen perlu diinisialisasi (jika Anda ingin menyebutnya)
2. Java.lang.classnotfoundException
Penjelasan pengecualian adalah "kelas yang ditentukan tidak ada".
3. java.lang.arithmeticException
Penjelasan dari pengecualian ini adalah "pengecualian operasi matematika". Misalnya, jika operasi seperti membagi dengan nol muncul dalam suatu program, pengecualian seperti itu akan terjadi.
4. Java.lang.ArrayIndExoutOfBoundsException
Penjelasan pengecualian adalah "Subskrip Array di luar batas". Sebagian besar program sekarang memiliki operasi pada array. Oleh karena itu, saat memanggil array, Anda harus dengan hati -hati memeriksa untuk melihat apakah subskrip yang Anda hubungi melebihi kisaran array. Secara umum, tidak mudah untuk membuat kesalahan seperti itu dengan menelepon tampilan (yaitu, secara langsung menggunakan konstanta untuk subskrip) panggilan, tetapi implisit (yaitu, menggunakan variabel untuk mewakili subskrip) sering membuat kesalahan. Ada situasi lain di mana panjang array yang ditentukan dalam program ditentukan oleh metode spesifik tertentu dan tidak dinyatakan sebelumnya. Pada saat ini, yang terbaik adalah memeriksa panjang array terlebih dahulu untuk menghindari pengecualian ini.
5. java.lang.illegalargumentException
Penjelasan dari pengecualian ini adalah "kesalahan parameter metode", seperti tiga nilai dalam metode G.setColor (int red, int green, int blue). Jika ada lebih dari 255, pengecualian ini juga akan terjadi. Oleh karena itu, setelah pengecualian ini ditemukan, yang perlu kita lakukan adalah dengan cepat memeriksa apakah ada kesalahan dalam parameter yang lewat dalam panggilan metode.
6. java.lang.illegalaccessException
Penjelasan pengecualian ini adalah "tidak ada izin akses". Pengecualian ini akan terjadi ketika aplikasi ingin memanggil kelas, tetapi metode saat ini tidak memiliki izin akses ke kelas. Saat menggunakan paket dalam program, Anda harus memperhatikan pengecualian, pengecualian, dan java ini
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!