1. Apa itu pengecualian?
Pertama, mari kita lihat contoh pada gambar di bawah ini:
Dalam contoh ini, kode kesalahan ada dengan membaginya dengan 0. Pengecualian karena membagi dengan 0: ArithMeticException
HelloException.java
paket com.yiibai.tutorial.exception; kelas publik helloException {public static void main (string [] args) {System.out.println ("tiga"); // Divisi ini tidak masalah. nilai int = 10/2; System.out.println ("dua"); // Divisi ini tidak masalah. nilai = 10/1; System.out.println ("One"); // Divisi ini memiliki masalah, dibagi dengan 0. // kesalahan telah terjadi di sini. nilai = 10 /0; // dan kode berikut tidak akan dieksekusi. System.out.println ("Ayo pergi!"); }}Menjalankan contoh ini akan terjadi:
Anda dapat melihat pemberitahuan di layar konsol. Pemberitahuan kesalahan sangat jelas, termasuk informasi tentang baris kode.
Mari kita lihat program berikut melalui proses pada gambar di bawah ini:
Kami akan memodifikasi kode perwujudan yang disebutkan di atas.
HelloCatchException.java
paket com.yiibai.tutorial.exception; kelas publik HelloCatchException {public static void main (string [] args) {System.out.println ("tiga"); // Divisi ini tidak masalah. nilai int = 10/2; System.out.println ("dua"); // Divisi ini tidak masalah. nilai = 10/1; System.out.println ("One"); Coba {// Divisi ini memiliki masalah, dibagi dengan 0. // kesalahan telah terjadi di sini. nilai = 10 /0; // dan kode berikut tidak akan dieksekusi. System.out.println ("value =" + value); } catch (arithMeticException e) {// Kode di blok tangkapan akan dieksekusi system.out.println ("error:" + e.getMessage ()); // Kode di blok tangkapan akan dieksekusi System.out.println ("Abaikan ..."); } // Kode ini dijalankan System.out.println ("Ayo pergi!"); }}Menjalankan hasil sampel:
Tiga
Dua
Satu
Kesalahan: / dengan nol
Mengabaikan...
Ayo pergi!
Kami akan menjelaskan prosedur berikut sebagai berikut aliran contoh gambar.
2. Pengecualian Hierarki <br /> Ini adalah model grafik hierarkis pengecualian Java.
Kelas tertinggi adalah: Throwable
Dua subkelas langsung adalah kesalahan dan pengecualian.
Ada subkelas RunimeException dalam transfer pengecualian, termasuk pengecualian waktu kompilasi yang tidak diperiksa di java. Periksa dan batalkan cek pada waktu kompilasi, seperti yang dijelaskan di bagian selanjutnya dari contoh implementasi.
Catatan: Kelas Anda harus mewarisi dari dua cabang: kesalahan atau pengecualian, tidak langsung dari yang dapat dilemparkan.
Mesin virtual meningkatkan kesalahan ini ketika tautan dinamis gagal, atau ketika beberapa kegagalan "keras" mesin virtual terjadi. Program Java yang khas tidak mendapatkan kesalahan, jadi program Java tidak melakukan kesalahan. Sebagian besar program melempar dan menangkap objek yang berasal dari kelas pengecualian. Pengecualian menunjukkan masalah, tetapi masalah ini bukan masalah sistemik yang serius. Sebagian besar program yang Anda tulis akan melempar dan menangkap pengecualian.
Kelas pengecualian mendefinisikan banyak subclass dalam paket Java. Subkelas ini menunjukkan bahwa berbagai jenis pengecualian dapat terjadi. Misalnya, NeegativearraysizeException menunjukkan bahwa program sedang mencoba membuat array dengan ukuran negatif.
Arti khusus dari subkelas sutradara dalam bahasa Java: kelas runimeException mewakili pengecualian yang terjadi (selama runtime) di mesin virtual Java. Contoh pengecualian runtime adalah pengecualian NullyiibaierException, yang dinaikkan ketika suatu metode mencoba mengakses anggota objek melalui referensi nol. NullyiibaierException dapat muncul di mana saja program mencoba untuk mendereferensi suatu objek. Manfaat memeriksa tangkapan pengecualian sering jauh lebih besar daripada biayanya.
Karena pengecualian runtime ada di mana -mana, sia -sia untuk mencoba menangkap atau menentukan sepanjang waktu (kode yang tidak dapat dibaca dan tidak dapat diketahui), kompiler memungkinkan pengecualian runtime untuk tidak dibawa dan menentukan.
Paket Java mendefinisikan beberapa kelas RunimeException. Anda dapat menangkap pengecualian ini, sama seperti yang lain. Tetapi tidak perlu cara untuk menentukan bahwa itu melempar pengecualian runtime. Selain itu, Anda dapat membuat subkelas RunimeException Anda sendiri. Pengecualian Runtime - Diskusi di bawah ini berisi diskusi mendalam tentang kapan dan cara menggunakan pengecualian runtime. 3. Gunakan cobalah untuk menangani pengecualian
Tulis kelas yang diwarisi dari pengecualian.
Ageexception.java
paket com.yiibai.tutorial.exception.basic; kelas publik ageException memperluas pengecualian {public ageException (string pesan) {super (pesan); }} TooyoungException.javapackage com.yiibai.tutorial.exception.basic; kelas publik TooyoungException memperluas ageException {public tooyoungException (pesan string) {super (pesan); }} TooLoldException.java
Paket com.yiibai.tutorial.exception.basic; kelas publik TooLyException memperluas ageException {public tooLyException (string pesan) {super (pesan); }} Dan metode statis untuk memeriksa usia untuk kelas Ageutils.
Ageutils.java
Paket com.yiibai.tutorial.exception.basic; kelas publik Ageutils {// Metode ini memeriksa usia. // Jika usia kurang dari 18, metode ini akan melempar pengecualian tooyoungexception // jika usia lebih dari 40, metode ini akan melempar pengecualian tooLyException public static void checkage (int usia) melempar tooyoungException, TooLyException {if (18) ini {// Jika usia lebih dari 18, pengecualian akan menjadi pengecualian {if (18) {// jika usia kurang dari 18, pengecualian akan menjadi pengecualian {if (18) {// jika usia kurang dari 18, sebuah pengecualian akan menjadi pengecualian {if (18) {// Jika usia kurang dari 18, sebuah pengecualian akan menjadi pengecualian {if (18) {// Jika usia kurang dari 18, sebuah pengecualian akan akan menjadi pengecualian. Lemparkan TooyoungException baru ("usia" + usia + "terlalu muda"); } lain jika (usia> 40) {// Jika usia lebih besar dari 40, pengecualian akan dilemparkan. // Metode ini berakhir di sini. Lemparkan TooLyException baru ("usia" + usia + "terlalu tua"); } // Jika usia antara 18-40. // Kode ini akan dieksekusi. System.out.println ("usia" + usia + "ok!"); }} Periksa pengecualian dan pengecualian yang tidak terkendali:
Ageexception adalah pengecualian, subkelas TooLyException dan tooyoungException2 adalah subkelas langsung dari ageException, jadi mereka "pengecualian diperiksa"
Metode Ageutils.Checkage (int) telah melempar pengecualian dan perlu membuat daftar deklarasi metode mereka melalui kata kunci "lemparan". Atau Anda dapat menyatakan melempar lebih banyak level.
Lokasi Ageutils.Checkage (int) juga harus diproses untuk menangkap pengecualian atau terus melemparkannya.
"Excected Exception" diperiksa oleh "Java Compiler".
Ada dua opsi:
Trycatchdemo1.java
paket com.yiibai.tutorial.exception.basic; kelas publik trycatchdemo1 {public static void main (string [] args) {system.out.println ("Mulai perekrutan ..."); // Periksa Systeme.out.println ("Periksa Usia Anda"); usia int = 50; coba {ageutils.checkage (usia); System.out.println ("You Pass!"); } catch (tooyoungException e) {// lakukan sesuatu di sini .. System.out.println ("Kamu terlalu muda, bukan lulus!"); System.out.println (e.getMessage ()); } catch (TooLyException e) {// Lakukan sesuatu di sini .. System.out.println ("Kamu terlalu tua, bukan lulus!"); System.out.println (e.getMessage ()); }}} Dalam contoh berikut, kami akan menangkap pengecualian (kelas Hyperexception) melalui kelas induk.
Trycatchdemo2.java
paket com.yiibai.tutorial.exception.basic; kelas publik trycatchdemo2 {public static void main (string [] args) {system.out.println ("Mulai perekrutan ..."); // Periksa Systeme.out.println ("Periksa Usia Anda"); usia int = 15; Coba {// di sini dapat melempar TooLyException atau tooyoungexception Ageutils.checkage (usia); System.out.println ("You Pass!"); } catch (ageException e) {// Jika pengecualian terjadi, jenis ageException // blok tangkapan ini akan dieksekusi System.out.println ("Usia Anda tidak valid, Anda tidak lulus"); System.out.println (e.getMessage ()); }}} Pengecualian yang berbeda juga dapat dikelompokkan dalam blok untuk ditangani jika ditangani dengan cara yang sama untuk program logis.
Trycatchdemo3.java
paket com.yiibai.tutorial.exception.basic; kelas publik trycatchdemo3 {public static void main (string [] args) {system.out.println ("Mulai perekrutan ..."); // Periksa Systeme.out.println ("Periksa Usia Anda"); usia int = 15; Coba {// di sini dapat melempar TooLyException atau tooyoungexception Ageutils.checkage (usia); System.out.println ("You Pass!"); } catch (tooyoungException | TooLyException e) {// Tangkap multi pengecualian dalam satu blok. System.out.println ("Usia Anda tidak valid, Anda tidak lulus"); System.out.println (e.getMessage ()); }}} 4. Cobalah tangkapan akhir
Kami terbiasa menangkap kesalahan melalui blok mencoba-tangkapan. Cobalah tangkapan akhir untuk menangani pengecualian sepenuhnya.
coba {// lakukan sesuatu di sini} catch (exception1 e) {// lakukan sesuatu di sini} catch (exception2 e) {// lakukan sesuatu di sini} akhirnya {// akhirnya blok selalu dieksekusi // lakukan sesuatu di sini} Trycatchfinallydemo.java
Paket com.yiibai.tutorial.exception.basic; kelas publik trycatchfinallydemo {public static void main (string [] args) {string text = "001234a2"; nilai int = toInteger (teks); System.out.println ("value =" + value); } public static int toInteger (string text) {try {System.out.println ("Mulai Parse Text:" + Text); // Pengecualian dapat melempar di sini (NumberFormateException). value int = integer.parseint (teks); nilai pengembalian; } catch (NumberFormateException e) {// Dalam kasus 'teks' bukan angka. // Blok tangkapan ini akan dieksekusi. System.out.println ("Pengecualian Format Number" + E.GetMessage ()); // returns 0 Jika numberFormateException terjadi pengembalian 0; } akhirnya {System.out.println ("END Parse Text:" + Text); }}}Ini adalah proses program. Blok akhirnya akan selalu dieksekusi dalam keadaan apa pun.
5. Pengecualian di sekitarnya
Orang.java
paket com.yiibai.tutorial.exception.wrap; orang kelas publik {public static final string pria = "pria"; Public Static Final String Wanita = "Wanita"; nama string pribadi; Jenis kelamin string pribadi; usia int pribadi; orang publik (nama string, gender string, usia int) {this.name = name; this.gender = jenis kelamin; this.age = usia; } public string getName () {return name; } public void setName (name string) {this.name = name; } public string getGender () {return gender; } public void setGender (string gender) {this.gender = gender; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; }} Genderexception.java
Paket com.yiibai.tutorial.exception.wrap; // gender exception.public kelas genderexception memperluas pengecualian {public genderexception (pesan string) {super (pesan); }} Paket kelas ValidateException memiliki pengecualian lain.
ValidateException.java
Paket com.yiibai.tutorial.exception.wrap; kelas publik ValidateException memperluas Exception {// Bungkus pengecualian public validateException (pengecualian e) {super (e); }} Validateutils.java
Paket com.yiibai.tutorial.exception.wrap; impor com.yiibai.tutorial.exception.basic.ageutils; kelas publik validateutils {public static void checkperson (orang orang) melempar ValidateException {coba {// periksa usia. // valid jika antara 18-40 // metode ini dapat melempar TooLyException, tooyoungException. Ageutils.checkage (person.getage ()); } catch (Exception e) {// Jika tidak valid // Bungkus pengecualian ini dengan ValidateException, dan lempar validateException baru (e); } // Jika orang itu perempuan, yaitu tidak valid. if (person.getgender (). Equals (person.female)) {genderexception e = GenderException baru ("Jangan menerima wanita"); Lempar ValidateException baru (E); }}} WrapperexceptionDemo.java
Paket com.yiibai.tutorial.exception.wrap; kelas publik wrapperexceptiondemo {public static void main (string [] args) {// Satu perekrutan peserta. Orang orang = orang baru ("menikah", orang. Female, 20); Coba {// Pengecualian dapat terjadi di sini. Validateutils.Checkperson (orang); } catch (ValidateException Wrap) {// Dapatkan penyebab sebenarnya. // Mungkin tooyoungException, TooLyException, GenderException Exception Cause = (Exception) Wrap.getCause (); if (cause! = null) {System.out.println ("Not Pass, Cause:" + cause.getMessage ()); } else {System.out.println (wrap.getMessage ()); }}}}6. RuntimeException dan subclass kelas RunimeException dan subclass -nya keduanya "pengecualian yang tidak terkendali". Itu tidak diperiksa pada waktu kompilasi oleh kompiler Java. Dalam beberapa kasus, Anda dapat mewarisi dari cabang ini untuk menulis pengecualian Anda sendiri.
Di bawah ini adalah beberapa kelas milik cabang RunimeException (tentu saja, ini bukan semua).
Beberapa contoh penanganan pengecualian jenis ini:
6.1- NullyibaierException
Ini adalah pengecualian yang paling umum dan biasanya menyebabkan kesalahan dalam program. Pengecualian dilemparkan saat Anda memanggil metode atau mengakses bidang objek kosong.
Nullyiibaierexceptiondemo.java
Paket com.yiibai.tutorial.exception.runtime; kelas publik nullyibaierexceptionDemo {// misalnya, berikut adalah metode yang dapat mengembalikan string null. string statis publik getString () {if (1 == 2) {return "1 == 2 !!"; } return null; } public static void main (string [] args) {// Ini adalah objek yang referensi bukan nol. String text1 = "Hello Exception"; // Panggil metode ini mengambil panjang string. int panjang = text1.length (); System.out.println ("Panjang Text1 =" + Length); // Ini adalah objek yang merujuk nol. String text2 = getString (); // Panggil metode ini mengambil panjang string. // NullyiibaierException akan terjadi di sini. // Ini adalah pengecualian yang terjadi saat runtime (jenis runtimeException) // javac compiler tidak memaksa Anda untuk menggunakan blok try-catch untuk menangani panjangnya = text2.length (); System.out.println ("Selesai!"); }}Hasil menjalankan contoh:
Pada kenyataannya, cobalah tangkapan dapat digunakan untuk menangkap dan menangani pengecualian ini seperti saat menangani pengecualian lainnya. Namun, ini mekanis dan biasanya kita harus memeriksa untuk memastikan bahwa objek tidak nol sebelum menggunakannya.
Anda dapat memperbaiki kode di atas untuk membuatnya mirip dengan yang berikut untuk menghindari pengecualian penunjuk nol:
// Ini adalah objek null.string text2 = getString (); // periksa untuk memastikan 'text2' bukan null.// alih-alih menggunakan try-catch.if (text2! = Null) {length = text2.length ();} 6.2- ArrayIndExofBoundException
Pengecualian ini terjadi ketika Anda mencoba mengakses elemen array dengan indeks yang tidak valid. Misalnya, array memiliki 10 elemen untuk diakses, tetapi Anda mengakses elemen dengan indeks 20.
ArrayIndExofBoundsExceptionDemo.java
Paket com.yiibai.tutorial.exception.runtime; kelas publik arrayIndexofboundsExceptionDemo {public static void main (string [] args) {string [] strs = string baru [] {"satu", "dua", "tiga"}; // akses ke elemen memiliki indeks 0. string str1 = strs [0]; System.out.println ("String at 0 =" + str1); // akses ke elemen memiliki indeks 5. // arrayIndexofboundsException terjadi di sini. String str2 = strs [5]; System.out.println ("String at 5 =" + str2); }} Untuk menghindari ArrayIndExofBoundSException, kita harus lebih tentang memeriksa array daripada menggunakan TRY-Catch.
if (strs.length> 5) {string str2 = strs [5]; System.out.println ("String at 5 =" + str2);} else {System.out.println ("Tidak ada elemen dengan indeks 5");}Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.