Tutorial penanganan eksepsi Java Terbaik Pada tahun 2024, Dalam tutorial ini Anda dapat mempelajari hierarki kelas Exception,Built-in Java kelas pengecualian,anomali,Menangkap pengecualian,Beberapa blok catch,melempar Kata kunci / melemparkan:,akhirnya kata kunci,Pernyataan pengecualian kustom,pengecualian umum,
Pengecualian adalah beberapa kesalahan dalam program, tetapi tidak semua kesalahan pengecualian, dan kadang-kadang kesalahan dapat dihindari.
Misalnya, kode Anda kurang titik koma, kemudian kehabisan hasil adalah untuk mendorong java.lang.Error salah, jika Anda menggunakan System.out.println (11/0), maka Anda lakukan karena Anda menggunakan pembagi 0 Ini akan dilempar java.lang.ArithmeticException pengecualian.
Ada banyak alasan untuk pengecualian terjadi, biasanya berisi kategori berikut:
pengecualian ini baik karena kesalahan pengguna menyebabkan beberapa kesalahan prosedural yang disebabkan karena ada kesalahan fisik lainnya. -
Untuk memahami Java penanganan eksepsi adalah cara kerjanya, Anda harus memiliki tiga jenis berikut pengecualian:
Semua kelas pengecualian mewarisi dari java.lang.Exception subclass.
kelas pengecualian adalah subclass dari kelas Throwable. Selain kelas Exception, Throwable ada subclass dari Kesalahan.
program Java biasanya tidak menangkap kesalahan. Kesalahan umumnya terjadi ketika sebuah kesalahan serius, mereka terlihat luar pengolahan program Java.
Kesalahan runtime lingkungan digunakan untuk menunjukkan kesalahan terjadi.
Misalnya, JVM memori melimpah. Secara umum, program ini tidak sembuh dari kesalahan.
kelas Exception memiliki dua sub-kategori: kelas IOException dan kelas RuntimeException.
Built-in class Java (selanjutnya akan dijelaskan), ia memiliki sebagian besar pemeriksaan biasa dan pengecualian dicentang.
bahasa Jawa mendefinisikan beberapa kelas pengecualian dalam paket java.lang standar.
Kelas runtime pengecualian standar adalah subclass dari kelas pengecualian yang paling umum. Sejak paket java.lang dimuat secara default untuk semua program Java, sehingga sebagian besar dari kelas runtime pengecualian mewarisi kelainan dapat digunakan secara langsung.
Menurut berbagai kelas Java perpustakaan juga mendefinisikan sejumlah pengecualian lainnya, tabel berikut berisi daftar Jawa pengecualian dicentang.
abnormal | deskripsi |
---|---|
ArithmeticException | Ketika kondisi operasi abnormal, pengecualian ini dilemparkan. Sebagai contoh, sebuah integer "bagi dengan nol" dilemparkan sebuah instance dari kelas ini. |
ArrayIndexOutOfBoundsException | Dengan indeks ilegal untuk mengakses array dilemparkan. Jika indeks negatif atau lebih besar dari atau sama besar dari array, indeks indeks ilegal. |
ArrayStoreException | Mencoba untuk menyimpan salah jenis objek ke array pengecualian dilemparkan. |
ClassCastException | Ketika Anda mencoba untuk melemparkan sebuah benda bukan merupakan contoh dari subclass Dilemparkan. |
IllegalArgumentException | Dilemparkan untuk menunjukkan bahwa metode ini telah melewati argumen ilegal atau tidak pantas. |
IllegalMonitorStateException | Dilemparkan untuk menunjukkan bahwa benang telah berusaha untuk menunggu di monitor obyek atau untuk memberitahukan benda lain yang menunggu memantau benang tanpa monitor ditentukan. |
IllegalStateException | Dalam kasus waktu ilegal atau tidak pantas untuk memanggil metode untuk menghasilkan sinyal. Dengan kata lain, lingkungan Java atau aplikasi Java tidak dalam keadaan yang tepat untuk operasi yang diminta. |
IllegalThreadStateException | Thread tidak dalam keadaan yang tepat saat operasi yang diminta diperlukan dibuang. |
IndexOutOfBoundsException | Hal ini menunjukkan indeks semacam (seperti menyortir array, string atau vektor) dilempar keluar dari jangkauan. |
NegativeArraySizeException | Jika aplikasi mencoba untuk membuat sebuah array dengan ukuran negatif, dilemparkan. |
NullPointerException | Ketika sebuah aplikasi mencoba untuk menggunakan objek membutuhkan lokal null ketika Dilemparkan |
NumberFormatException | Ketika sebuah aplikasi mencoba untuk mengkonversi string ke tipe numerik, tetapi bahwa string tidak dapat dikonversi ke format yang sesuai, dished anomali. |
SecurityException | Oleh manajer keamanan melempar pengecualian, itu menunjukkan pelanggaran keamanan. |
StringIndexOutOfBoundsException | pengecualian ini dari String melempar metode untuk menunjukkan bahwa indeks adalah baik negatif atau lebih besar dari ukuran string. |
UnsupportedOperationException | Ketika operasi yang diminta tidak didukung Dilemparkan. |
Tabel berikut berisi daftar Jawa didefinisikan dalam paket java.lang diperiksa kelas pengecualian.
abnormal | deskripsi |
---|---|
ClassNotFoundException | Aplikasi mencoba untuk memuat kelas, Anda tidak dapat menemukan kelas yang sesuai dilemparkan. |
CloneNotSupportedException | Ketika Anda memanggil Object kelas clone metode untuk mengkloning sebuah objek, tetapi kelas objek tidak dapat mengimplementasikan Cloneable antarmuka Dilemparkan. |
IllegalAccessException | Ketika ditolak akses ke kelas Dilemparkan. |
InstantiationException | Ketika Anda mencoba untuk menggunakan Class kelas newInstance membuat sebuah instance dari metode kelas, yang ditunjuk objek kelas karena merupakan antarmuka atau kelas abstrak tidak dapat dipakai, dished anomali. |
InterruptedException | Sebuah thread terganggu oleh thread lain, pengecualian ini dilemparkan. |
NoSuchFieldException | Variabel diminta tidak ada |
NoSuchMethodException | Metode diminta tidak ada |
Daftar berikut adalah metode utama kelas Throwable:
Tidak. | Metode dan Deskripsi |
---|---|
1 | public String getMessage () Mengembalikan informasi rinci tentang pengecualian terjadi. Kabar diinisialisasi dalam konstruktor dari kelas Throwable. |
2 | publik Throwable getCause () Mengembalikan sebuah objek Throwable yang mewakili alasan untuk pengecualian. |
3 | String public toString () Hasil menggunakan getMessage () mengembalikan nama kelas Cascade. |
4 | public void printStackTrace () Cetak toString () hasil dan tingkat stack untuk System.err, yaitu output stream kesalahan. |
5 | publik StackTraceElement [] getStackTrace () Ia mengembalikan array yang berisi tingkat stack. 0 subscript elemen mewakili atas tumpukan, elemen terakhir merupakan bawah tumpukan metode panggilan stack. |
6 | publik Throwable fillInStackTrace () Throwable objek stack diisi dengan tingkat saat ini tingkat panggilan tumpukan, ditambahkan ke tingkat tumpukan informasi sebelumnya. |
Gunakan mencoba dan menangkap kata kunci dapat menangkap pengecualian. mencoba / menangkap blok di tempat pengecualian yang mungkin terjadi.
Sintaks kode try / catch blok disebut kode perlindungan menggunakan mencoba / menangkap adalah sebagai berikut:
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
menangkap pernyataan berisi pengecualian untuk menangkap jenis pernyataan. Ketika blok kode perlindungan ketika pengecualian terjadi, cobalah belakang blok catch akan diperiksa.
Jika pengecualian yang terkandung dalam blok catch, pengecualian akan diteruskan ke blok catch, dan lulus parameter untuk metode ini adalah sama.
Contoh berikut telah mendeklarasikan array dua elemen, ketika kode mencoba untuk mengakses elemen ketiga dari array ketika akan melempar pengecualian.
// 文件名 : ExcepTest.java import java.io.*; public class ExcepTest{ public static void main(String args[]){ try{ int a[] = new int[2]; System.out.println("Access element three :" + a[3]); }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e); } System.out.println("Out of the block"); } }
Kompilasi kode di atas dan menjalankan hasil sebagai berikut:
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 Out of the block
Sebuah pluralitas blok kode catch setelah blok kode disebut mencoba untuk mengikuti beberapa capture.
Beberapa sintaks menangkap blok adalah sebagai berikut:
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }
Potongan kode di atas mengandung tiga blok catch.
Anda dapat menambahkan sejumlah blok catch balik pernyataan try.
Jika pengecualian terjadi dalam kode perlindungan, eksepsi dilemparkan ke blok catch pertama.
Jika Anda membuang tipe data mismatch pengecualian ExceptionType1, di mana ia akan ditangkap.
Jika tidak, itu akan dipindahkan ke blok catch kedua.
Jadi, sampai pengecualian tertangkap oleh catch atau blok.
Contoh ini menunjukkan bagaimana menggunakan beberapa try / catch.
try { file = new FileInputStream(fileName); x = (byte) file.read(); }catch(IOException i) { i.printStackTrace(); return -1; }catch(FileNotFoundException f) //Not valid! { f.printStackTrace(); return -1; }
Jika metode tidak menangkap pengecualian diperiksa, maka metode harus menggunakan melempar kata kunci untuk menyatakan. melempar kata kunci ditempatkan pada akhir metode tanda tangan.
Anda juga dapat menggunakan lemparan kata kunci melempar pengecualian, apakah itu baru atau baru dipakai ditangkap.
Metode mengikuti deklarasi melempar pengecualian RemoteException:
import java.io.*; public class className { public void deposit(double amount) throws RemoteException { // Method implementation throw new RemoteException(); } //Remainder of class definition }
Metode dapat dideklarasikan untuk melemparkan beberapa pengecualian, dipisahkan oleh koma di antara beberapa pengecualian.
Misalnya, metode berikut deklarasi melempar RemoteException dan InsufficientFundsException:
import java.io.*; public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } //Remainder of class definition }
akhirnya kata kunci digunakan untuk membuat blok kode setelah blok kode mencoba untuk melakukan.
Apakah pengecualian terjadi, akhirnya kode blok kode akan selalu dieksekusi.
Di blok akhirnya, Anda dapat menjalankan membersihkan setelah sifat dari jenis berakhir pernyataan.
akhirnya blok muncul di blok catch Akhirnya, sintaksnya adalah sebagai berikut:
try{ // 程序代码 }catch(异常类型1 异常的变量名1){ // 程序代码 }catch(异常类型2 异常的变量名2){ // 程序代码 }finally{ // 程序代码 }
public class ExcepTest{ public static void main(String args[]){ int a[] = new int[2]; try{ System.out.println("Access element three :" + a[3]); }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Exception thrown :" + e); } finally{ a[0] = 6; System.out.println("First element value: " +a[0]); System.out.println("The finally statement is executed"); } } }
Contoh di atas hasil disusun adalah sebagai berikut:
Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3 First element value: 6 The finally statement is executed
Perhatikan bahwa hal-hal berikut:
Di Jawa, Anda dapat menyesuaikan pengecualian. Poin-poin berikut harus ingat untuk menulis kelas pengecualian Anda sendiri.
Anda dapat mendefinisikan kelas pengecualian Anda sendiri seperti ini:
class MyException extends Exception{ }
Hanya mewarisi kelas Exception untuk membuat kelas pengecualian diperiksa kelas pengecualian.
Berikut kelas InsufficientFundsException adalah kelas pengecualian yang ditetapkan pengguna yang mewarisi dari Exception.
Kelas pengecualian dan setiap kelas lain, berisi variabel, dan metode.
// 文件名InsufficientFundsException.java import java.io.*; public class InsufficientFundsException extends Exception { private double amount; public InsufficientFundsException(double amount) { this.amount = amount; } public double getAmount() { return amount; } }
Untuk menunjukkan bagaimana menggunakan class exception kebiasaan kami,
Di kelas CheckingAccount berikut berisi metode menarik () throws InsufficientFundsException pengecualian.
// 文件名称 CheckingAccount.java import java.io.*; public class CheckingAccount { private double balance; private int number; public CheckingAccount(int number) { this.number = number; } public void deposit(double amount) { balance += amount; } public void withdraw(double amount) throws InsufficientFundsException { if(amount <= balance) { balance -= amount; } else { double needs = amount - balance; throw new InsufficientFundsException(needs); } } public double getBalance() { return balance; } public int getNumber() { return number; } }
Program berikut menunjukkan bagaimana memanggil kelas BankDemo CheckingAccount deposito () dan menarik () metode.
//文件名称 BankDemo.java public class BankDemo { public static void main(String [] args) { CheckingAccount c = new CheckingAccount(101); System.out.println("Depositing $500id."); c.deposit(500.00); try { System.out.println("\nWithdrawing $100id."); c.withdraw(100.00); System.out.println("\nWithdrawing $600id."); c.withdraw(600.00); }catch(InsufficientFundsException e) { System.out.println("Sorry, but you are short $" + e.getAmount()); e.printStackTrace(); } } }
Mengkompilasi atas tiga file, dan menjalankan program BankDemo, mendapatkan hasil sebagai berikut:
Depositing $500id. Withdrawing $100id. Withdrawing $600id. Sorry, but you are short $200.0 InsufficientFundsException at CheckingAccount.withdraw(CheckingAccount.java:25) at BankDemo.main(BankDemo.java:13)
Mendefinisikan dua jenis pengecualian dan kesalahan di Jawa.