1. Java Ringkasan Pengecualian:
Pengecualian berarti operasi abnormal saat program berjalan
1. Asal Pengecualian:
Deskripsi masalah dalam hal -hal nyata melalui bentuk kelas Java dan disegel ke dalam suatu objek
Bahkan, itu adalah manifestasi objek setelah Java menggambarkan situasi yang tidak normal.
2. Ada dua jenis masalah: satu adalah masalah serius, dan yang lainnya adalah masalah serius
Untuk kasus serius, Java menggambarkannya melalui kelas kesalahan
Kesalahan umumnya tidak ditulis untuk memprosesnya.
Untuk non-serius, Java dijelaskan oleh kelas pengecualian
Untuk pengecualian, Anda dapat menggunakan metode pemrosesan yang ditargetkan untuk menanganinya
3. Pengecualian umum meliputi: Pengecualian lintas batas sudut array, pengecualian pointer nol ...
4. Apakah kesalahan atau pengecualian memiliki beberapa konten umum.
Misalnya: berita abnormal, penyebab, dll.
Throwable // Kelas Premium (dua kelas berikut diekstraksi dari kesamaan yang sama)
| --Ror
| --Excption // Dua Subclass (Ada banyak masalah yang ditentukan (pengecualian terjadi)) /*Nama kelas induk adalah nama akhiran subkelas* /
Contoh 1: Contoh kejadian pengecualian
Demo kelas {public int div (int x, int y) {return x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); int x = d.div (4,0); // 0 sebagai divisor system.out.println ("x ="+x); System.out.println ("over"); }}Hasil Menjalankan:
Pengecualian di Thread "Main" java.lang.arithmeticexception: / by nol
di demo.div (ExceptionDemo.java:5)
di ExceptionDemo.main (ExceptionDemo.java:15)
Dari hasil di atas, kita dapat menganalisis bahwa pengecualian terjadi di kedua baris 5 dan 15. Ini karena mekanisme pembagian, pembagi tidak dapat 0, dan pengecualian akan dilemparkan ketika operasi dijalankan.
Contoh 2: Pengecualian Contoh 2, memori overflow
Demo kelas {public int div (int x, int y) {return x/y; }} class exceptionDemo {public static void main (string args []) { /*demo d = demo baru (); int x = d.div (4,0); System.out.println ("x ="+x); System.out.println ("over"); */ byte [] arr = byte baru [1024*1024*1000]; }}Hasil Menjalankan:
Pengecualian di Thread "Main" Java.lang.outofmemoryError: Java Heap Space
di ExceptionDemo.main (ExceptionDemo.java:19)
java.lang.outofmemoryError: mewakili pengecualian overflow memori
2. Penanganan Pengecualian:
Untuk penanganan pengecualian, Java memberikan pernyataan unik untuk diproses
Format
mencoba
{
kode yang perlu dideteksi;
}
menangkap
{
Kode untuk menangani pengecualian; (Metode pemrosesan)
}
Akhirnya
{
Kode yang pasti akan dieksekusi; (Metode pemrosesan)
}
Contoh 1: Demonstrasi Coba Tangkap Pernyataan
Demo kelas {public int div (int x, int y) {return x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); coba {int x = d.div (4,0); System.out.println ("x ="+x); } catch (Exception e) {System.out.println ("Divisor Cerai"); } System.out.println ("over"); /*byte [] arr = byte baru [1024*1024*1000];*/}}Hasil Menjalankan:
Ada kesalahan di pembagi
lebih
Analisis Hasil: Ketika program berjalan, ketika pernyataan divisi dieksekusi: return x/y, objek pengecualian dihasilkan. New ArchMeticException (), pernyataan coba menangkap objek ini dengan parameter pernyataan tangkapan.
Pengecualian e = archmeticException baru ();
Setelah menjalankan pernyataan Catch Processing, masalahnya diproses, pernyataan akhir selesai, dan output sudah berakhir
Contoh 2: Lakukan Operasi Metode Umum pada Objek Pengecualian yang Diambil (Metode Throwable Kelas Induk)
String getMessage (); // Dapatkan informasi pengecualian
tostring () // mengembalikan nama pengecualian: informasi pengecualian
PrintStackTrace () // Output Nama Pengecualian, Informasi Pengecualian, Lokasi Kejadian Pengecualian
Demo kelas {public int div (int x, int y) {return x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); coba {int x = d.div (4,0); System.out.println ("x ="+x); } catch (Exception e) {System.out.println ("Divisor Cerai"); // Dapatkan System Informasi Pengecualian.out.println (e.getMessage ()); // Dapatkan informasi pengecualian, System Name Pengecualian.out.println (e.tostring ()); // output nama pengecualian, informasi pengecualian, lokasi di mana pengecualian terjadi e.printstacktrace (); } System.out.println ("over"); /*byte [] arr = byte baru [1024*1024*1000];*/}}Hasil Menjalankan:
Ada kesalahan di pembagi
/ oleh nol
java.lang.arithmeticException: / by nol
java.lang.arithmeticException: / by nol
di demo.div (ExceptionDemo.java:5)
di ExceptionDemo.main (ExceptionDemo.java:17)
lebih
Dari analisis hasil berjalan, mekanisme penanganan pengecualian default JVM sebenarnya menyebut metode printStackTrace.
Contoh 3: Dua cara untuk menangani pelemparan pengecualian
1. Lemparkan ke mesin virtual JVM untuk diproses
2. Tangani pengecualian yang dilemparkan sendiri
Demo kelas {public int div (int x, int y) melempar pengecualian/*lemparan pengecualian di mana pengecualian dapat terjadi*/{return x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); int x = d.div (4,0); System.out.println ("x ="+x); System.out.println ("over"); }}Hasil Menjalankan:
ExceptionDemo.java:15: Kesalahan: Pengecualian kesalahan pengecualian yang tidak dilaporkan; itu harus ditangkap atau dinyatakan untuk melempar
int x = d.div (4,0);
^
1 kesalahan
Analisis Hasil: Ini karena tidak ada pengecualian yang diproses
Metode pemrosesan 1: terus -menerus melempar pengecualian dan biarkan mesin virtual JVM menanganinya sendiri
Demo kelas {public int div (int x, int y) melempar pengecualian/*lemparan pengecualian di mana pengecualian dapat terjadi*/{return x/y; }} class exceptionDemo {public static void main (string args []) melempar Exception /*Terus melempar pengecualian dan memberikan ke mesin virtual* / {demo d = demo baru (); int x = d.div (4,0); System.out.println ("x ="+x); System.out.println ("over"); }}Metode Penanganan 2: Tangani pengecualian sendiri
Demo kelas {public int div (int x, int y) melempar pengecualian/*lemparan pengecualian di mana pengecualian dapat terjadi*/{return x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); coba // menangani pengecualian sendiri {int x = d.div (4,0); System.out.println ("x ="+x); } catch (Exception e) {System.out.println ("Divisor Cerai"); // Dapatkan informasi pengecualian, System Name Pengecualian.out.println (e.tostring ()); System.out.println ("over"); }}}Meringkaskan:
Menyatakan pengecualian pada fungsi. Lebih mudah untuk meningkatkan keamanan, memungkinkan sumber panggilan diproses tanpa memproses kegagalan kompilasi.
Contoh 4: Menangani beberapa pengecualian
1. Saat menyatakan pengecualian, disarankan untuk menyatakan pengecualian yang lebih spesifik, sehingga mereka dapat ditangani secara lebih spesifik.
2. Deklarasikan beberapa pengecualian, dan ada beberapa blok tangkapan. Jangan mendefinisikan tangkapan yang tidak perlu dengan cepat.
Jika ada hubungan warisan di beberapa blok tangkapan, blok tangkapan pengecualian kelas induk ditempatkan di bawah ini.
Demo kelas {public int div (int x, int y) melempar arithmeticException, arrayIndexoutofboundsException {int arr [] = int int [x]; System.out.println (ARR [4]); mengembalikan x/y; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); coba {int x = d.div (4,0); System.out.println ("x ="+x); } catch (ArithMeticException e) / *Bagilah objek pengecualian yang diterima, eksekusi pertama adalah * / {System.out.println ("pembagi yang diceraikan"); // Dapatkan informasi pengecualian, System Name Pengecualian.out.println (e.tostring ()); System.out.println ("over"); } catch (arrayIndExoutOfBoundSException e) / *Terima objek dengan data di luar batas, eksekusi kedua adalah * / {System.out.println ("arrayout"); // output System Informasi Pengecualian.out.println (e.toString ()); } catch (Exception e) /*Terima pengecualian kelas induk, dan jalankan pada akhirnya. Dianjurkan untuk tidak menulis ini, biarkan program mengakhiri*//*menggunakan polimorfisme*/ {System.out.println (e.toString ()); }}}Hasil Menjalankan:
Array di luar batas
java.lang.ArrayIndExoutOfBoundSexception: 4
saran:
Saat memproses tangkapan, Anda harus mendefinisikan metode pemrosesan spesifik dalam tangkapan.
Jangan hanya mendefinisikan E.PrintStackTrace ().
Jangan hanya menulis pernyataan output
Karena pengguna tidak dapat memahaminya, yang terbaik adalah menyimpannya dalam file dan mengirimkannya ke pengembang kami untuk melihatnya secara teratur.
Contoh 5: Pengecualian Kustom
Pernahkah Anda memperhatikan bahwa pengecualian yang kami gunakan semuanya dienkapsulasi dalam java
Namun, dalam pengembangan aktual, pengecualian yang muncul dalam program kami mungkin bahwa Java tidak dienkapsulasi.
Saat ini, Anda perlu mendefinisikannya sendiri
Menurut kode di atas, saya mendefinisikan bahwa pembagi tidak dapat menjadi angka negatif. Kodenya adalah sebagai berikut
Demo kelas {public int div (int x, int y) melempar fushuexception/*atas pengecualian*/{if (y <0) {lempar fushuexception baru ("Denominator memiliki angka negatif ------/bu fushu", y); /*Objek yang melempar pengecualian secara manual*/} mengembalikan x/y; }} class fushuexception memperluas pengecualian {nilai int private; Fushuexception (string m, nilai int) {super (m); /*Pass parameter ke metode getMessage dari pengecualian kelas induk*/ this.value = nilai; } public int getValue () /*Metode yang disesuaikan, pengembalian nomor negatif* / {nilai pengembalian; }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); coba {int x = d.div (4, -3); System.out.println ("x ="+x); } catch (fushuexception e) /*Catch Object Exception* / {System.out.println (e.getMessage ()+e.getValue ()); } System.out.println ("over"); }}Hasil Menjalankan:
Angka negatif muncul di denominator -----/bu fushu-3
lebih
Dari hasil di atas, kita bisa melihat
Dalam program ini, pembagi adalah -3, yang juga dianggap salah dan tidak dapat dilakukan.
Maka Anda perlu memiliki deskripsi khusus tentang masalah ini.
Saat melempar objek pengecualian di dalam fungsi muncul, tindakan pemrosesan yang sesuai harus diberikan.
Atau ditangani secara internal.
Baik mendeklarasikan fungsi untuk penelepon untuk menanganinya.
Secara umum, pengecualian muncul dalam fungsi dan perlu dinyatakan pada fungsi.
Ditemukan bahwa hanya ada nama pengecualian dalam hasil yang dicetak, tetapi tidak ada informasi pengecualian.
Karena pengecualian khusus tidak menentukan informasi.
Bagaimana cara mendefinisikan informasi pengecualian?
Karena pengoperasian informasi pengecualian telah selesai di kelas induk.
Oleh karena itu, subclass hanya perlu meneruskan informasi pengecualian ke kelas induk saat membangunnya melalui pernyataan super.
Kemudian Anda dapat secara langsung mendapatkan informasi pengecualian khusus melalui metode GetMessage.
Pengecualian khusus harus pengecualian warisan kelas khusus.
Warisan Alasan Pengecualian:
Sistem pengecualian memiliki fitur: karena kedua kelas pengecualian dan objek pengecualian dilemparkan.
Mereka semua bisa dilemparkan. Lemparan ini adalah fitur unik dari sistem yang dapat dilempar.
Hanya kelas dan objek dalam sistem ini yang dapat dioperasikan dengan lemparan dan lemparan.
Perbedaan antara lemparan dan lemparan
Lemparan digunakan pada fungsi.
Throw digunakan dalam fungsi.
Kelas pengecualian diikuti oleh lemparan. Dapat diikuti oleh banyak. Dipisahkan oleh koma.
Lemparan diikuti oleh objek pengecualian.
Contoh 6: Ada pengecualian subclass khusus di Exception RuntimeException
Jika pengecualian dilemparkan ke dalam konten fungsi, fungsi dapat dideklarasikan tanpa deklarasi dan kompilasi akan dilewati.
Jika pengecualian dinyatakan pada fungsi, penelepon tidak dapat memprosesnya, dan kompilasi akan dilakukan
Alasan mengapa tidak perlu menyatakan fungsi adalah bahwa penelepon tidak perlu menanganinya.
Ketika pengecualian ini terjadi, saya berharap program ini akan berhenti, karena tidak dapat berjalan saat berlari. Saya berharap program ini akan berhenti setelah program akan berhenti.
Programmer memodifikasi kode.
Demo kelas {public int div (int x, int y) melempar fushuexception/*hasil dari melempar atau tidak melempar adalah sama*/{if (y <0) {lempar fushuexception baru ("penyebut memiliki angka negatif -----/bu fushu", y); } return x/y; }} class fushuException memperluas runtimeException /*warisan runtimeException* /{fushuexception (string m, value int) {super (m); }} class exceptionDemo {public static void main (string args []) {demo d = demo baru (); int x = d.div (4, -3); /*Pengecualian akan muncul setelah menjalankan ini, tidak akan ada masalah dengan kompilasi*/ system.out.println ("x ="+x); System.out.println ("over"); }}Hasil Menjalankan:
Pengecualian di Thread "Main" Fushuexception: Nomor negatif muncul di denominator ------/bu fushu
di demo.div (ExceptionDemo.java:7)
di ExceptionDemo.main (ExceptionDemo.java:26)
Dari hasil di atas, kita dapat melihat:
Ketika pengecualian khusus: Jika pengecualian terjadi, operasi tidak dapat dilanjutkan.
Biarkan pengecualian khusus mewarisi runtimeException.
Untuk pengecualian, ada dua jenis:
1. Pengecualian terdeteksi selama kompilasi.
2. Pengecualian yang tidak terdeteksi selama kompilasi (pengecualian runtime. RuntimeException dan subkelasnya)
Artikel di atas secara komprehensif memahami mekanisme penanganan pengecualian di Java adalah semua konten yang telah saya bagikan dengan Anda. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.