Latest web development tutorials

penanganan eksepsi Java

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:

  • input pengguna data ilegal.
  • Untuk membuka file tidak ada.
  • Koneksi jaringan komunikasi terganggu atau JVM memori overflow.

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:

  • Memeriksa pengecualian: perwakilan yang paling diperiksa pengecualian adalah pengecualian karena kesalahan pengguna atau masalah, itu adalah programmer terduga. Misalnya ketika Anda ingin membuka file tidak ada, pengecualian terjadi, pengecualian tidak dapat diabaikan pada waktu kompilasi.
  • Pengecualian mungkin menjadi seorang programmer untuk menghindari operasi abnormal: run-time pengecualian. Berbeda dengan pengecualian diperiksa, runtime pengecualian dapat diabaikan pada waktu kompilasi.
  • Kesalahan: error tidak normal, tapi dari pertanyaan dari kontrol programmer. Kesalahan dalam kode biasanya diabaikan. Sebagai contoh, ketika stack overflow, kesalahan terjadi, mereka tidak dapat memeriksa pada waktu kompilasi.

hierarki kelas Exception

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.


Built-in Java kelas pengecualian

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

anomali

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.

Menangkap pengecualian

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

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

Beberapa blok catch

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

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;
}

melempar Kata kunci / melemparkan:

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

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{
    // 程序代码
 }
 

contoh

 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:

  • tangkapan tidak bisa eksis secara independen dari mencoba.
  • Dalam mencoba / menangkap blok tidak ditambahkan setelah persyaratan akhirnya wajib.
  • Tidak setelah blok try catch juga tidak akhirnya blok.
  • mencoba, menangkap, akhirnya tidak dapat menambahkan kode apapun antara blok.

Pernyataan pengecualian kustom

Di Jawa, Anda dapat menyesuaikan pengecualian. Poin-poin berikut harus ingat untuk menulis kelas pengecualian Anda sendiri.

  • Semua pengecualian harus subclass Throwable.
  • Jika Anda ingin menulis sebuah kelas pengecualian diperiksa, Anda perlu mewarisi kelas Exception.
  • Jika Anda ingin menulis sebuah kelas runtime pengecualian, Anda perlu mewarisi kelas RuntimeException.

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.

contoh

// 文件名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 $500...");
      c.deposit(500.00);
      try
      {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         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 $500...

Withdrawing $100...

Withdrawing $600...
Sorry, but you are short $200.0
InsufficientFundsException
        at CheckingAccount.withdraw(CheckingAccount.java:25)
        at BankDemo.main(BankDemo.java:13)

pengecualian umum

Mendefinisikan dua jenis pengecualian dan kesalahan di Jawa.

  • JVM (Java Virtual Machine) pengecualian: pengecualian dilemparkan oleh JVM atau kesalahan. Sebagai contoh: kelas NullPointerException, kelas ArrayIndexOutOfBoundsException, kelas ClassCastException.
  • Program tingkat pengecualian: Program API oleh program atau dibuang. Misalnya kelas IllegalArgumentException, kelas IllegalStateException.