Pengecualian Java dibagi menjadi dua kategori: pengecualian pengecualian dan pengecualian runtime. Pengecualian yang diperiksa adalah pengecualian yang dapat diproses selama tahap kompilasi.
Perbedaan dan koneksi antara pengecualian yang diperiksa dan pengecualian runtime
Kelas pengecualian umum
Daftar beberapa pengecualian runtime umum:
Daftar beberapa pengecualian non-runtime (pengecualian diperiksa):
Kesalahan
Kesalahan umumnya mengacu pada masalah yang terkait dengan mesin virtual, seperti kerusakan sistem, kesalahan mesin virtual, kegagalan tautan dinamis, dll. Kesalahan ini tidak dapat dipulihkan atau tidak dapat ditangkap, yang akan menyebabkan gangguan aplikasi. Biasanya aplikasi tidak dapat menangani kesalahan ini, sehingga program tidak boleh mencoba menggunakan tangkapan untuk menangkap objek kesalahan. Tidak perlu melempar objek kesalahan saat mendefinisikan metode.
Penggunaan pengecualian yang diperiksa
Seperti yang disebutkan sebelumnya, diperiksa harus ditangani secara eksplisit, jika tidak, kesalahan kompilasi akan dilaporkan, seperti menyatakan aliran input file:
FileInputStream fis = new fileInputStream ("test.md");Kode ini akan dikompilasi dengan kesalahan
Tipe Pengecualian Tanpa Tangan FileNotFoundException
Oleh karena itu, harus ditangani secara eksplisit, dan umumnya ada dua cara untuk menangani pengecualian yang diperiksa:
Jika Anda tahu cara menanganinya, yang terbaik adalah menggunakan mencoba ... tangkap ... pemrosesan blok:
// pengecualian yang diperiksa harus ditangani secara eksplisit coba {fileInputStream fis = FileInputStream baru ("test.md");} catch (FileNotFoundException e) {e.printstacktrace (); System.out.println ("File tidak ada!");}Jika Anda tidak tahu cara menghadapinya, maka lemparkan ke dalam metode dan tangani dengan penelepon sebelumnya:
Public static void main (String [] args) melempar FileNotFoundException {// pengecualian yang diperiksa harus ditangani secara eksplisit // Pengecualian dilemparkan dalam metode utama dan diserahkan ke JVM untuk diproses. Metode Pengecualian Penanganan JVM adalah mencetak Informasi Stack Trace dan mengakhiri program untuk menjalankan FileInputStream fis = FileInputStream baru ("test.md");} Gunakan lemparan untuk melempar sendiri
Terkadang, menurut kebutuhan bisnis, kami akan melemparkan pengecualian dalam program sendiri. Misalnya, jika konten file baca kosong, kami pikir ini adalah pengecualian. Pada saat ini, kita dapat menggunakan lemparan untuk secara aktif melempar pengecualian dan menangkapnya:
// Gunakan lemparan untuk secara aktif melempar pengecualian coba {fileInputStream fis = FileInputStream baru ("test.md"); if (fis.read () == 0) {lempar ioException baru ("file kosong"); }} catch (ioException e) {e.printstacktrace ();}Jika Throw melempar pengecualian runtime, program dapat ditangkap dengan mencoba ... tangkap ... atau abaikan.
Pemrosesan rantai pengecualian
Dalam aplikasi tingkat perusahaan nyata, kami sering tidak mengekspos pengecualian yang mendasari untuk aplikasi tingkat atas, seperti tidak mengekspos pengecualian SQL ke antarmuka pengguna. Pertama, bagi pengguna, melihat pengecualian SQL tidak membantu mereka, dan kedua, untuk pengguna jahat, tidak aman untuk mengekspos pengecualian yang mendasarinya.
Jadi bagaimana cara memblokir pengecualian yang mendasarinya? Praktik yang biasa adalah: Program pertama kali menangkap pengecualian asli, dan kemudian melempar pengecualian bisnis baru. Pengecualian bisnis baru berisi informasi cepat kepada pengguna. Cara penanganan ini menjadi terjemahan pengecualian. Berikut ini menunjukkan bagaimana program yang membuat pengguna memblokir pengecualian yang mendasarinya:
// Demonstrasi rantai pengecualian dan buat public void pengguna createSubscriber (int subid) melempar BusinessException {coba {// Buat logika pengguna ...} catch (pengecualian e) {// proses dan simpan pengecualian asli ... // Top dengan pengecualian bisnis baru lempar bisnis baru ("ciptaan pengguna gagal"); }}Anda dapat melihat bahwa program ini menyembunyikan pengecualian asli dan hanya memberikan informasi prompt pengecualian yang diperlukan ke atas, yang dapat memastikan bahwa pengecualian yang mendasarinya tidak akan diperluas ke lapisan presentasi, yang sepenuhnya sejalan dengan prinsip enkapsulasi objek.
Jenis ini menangkap satu pengecualian, melempar pengecualian lain, dan menyimpan informasi pengecualian asli adalah pemrosesan rantai yang khas, yang disebut pola rantai tanggung jawab dalam pola desain.
Beberapa saran untuk menggunakan pengecualian
Kami menggunakan pengecualian untuk mencapai beberapa tujuan:
Untuk mengatasi tujuan ini, kita harus:
1. Jangan terlalu sering digunakan atau mengandalkannya: Pengecualian sangat nyaman, tetapi jangan gunakan penanganan pengecualian untuk logika normal, seperti
// Kode Asli if (FileSize> 100) {sysotem.out.println ("File terlalu besar, silakan unggah lagi"); Lanjutkan;} // Ubah untuk menggunakan Exception IF (FileSize> 100) {Throw New Exception ("File terlalu besar, silakan unggah lagi");} // Melakukan ini jelas tidak bertanggung jawab.