Latest web development tutorials

obsługa wyjątków Java

Wyjątkiem są niektóre błędy w programie, ale nie wszystkie błędy są wyjątki, a czasami można uniknąć pomyłki.

Na przykład, kod mniej średnik, to zabraknie wyników jest skłonić złego java.lang.Error; jeśli używać System.out.println (11/0), a następnie robisz, bo używasz dzielnik 0 będzie on wyrzucony wyjątek java.lang.ArithmeticException.

Istnieje wiele powodów, dla wystąpi wyjątek, zwykle zawiera następujące kategorie:

  • Wprowadzane przez użytkownika nielegalnych danych.
  • Aby otworzyć plik nie istnieje.
  • komunikacja sieciowa jest przerwany lub JVM przepełnienia pamięci.

Te wyjątki albo z powodu błędu użytkownika spowodowana pewne błędy proceduralne spowodowane tym, że istnieją inne błędy fizyczne. -

Aby zrozumieć, obsługę wyjątków Java jest, jak to działa, trzeba mieć trzy następujące rodzaje wyjątków:

  • Sprawdzone wyjątek: najbardziej reprezentatywne sprawdzone Wyjątek stanowi wyjątek z powodu błędu użytkownika lub problem, to programista nieprzewidywalne. Na przykład, jeśli chcesz otworzyć plik nie istnieje, wystąpi wyjątek, wyjątek nie może być po prostu ignorowane w czasie kompilacji.
  • Wyjątkiem może być programistą, aby uniknąć nieprawidłowego działania: run-time wyjątek. W przeciwieństwie do sprawdzonej wyjątku, wyjątek środowiska wykonawczego mogą być ignorowane w czasie kompilacji.
  • Błąd: błąd nie jest nienormalne, ale od kwestii kontrolą programatora. Błąd w kodzie są zazwyczaj ignorowane. Na przykład, gdy wystąpi błąd przepełnienie stosu, nie mogą sprawdzić w czasie kompilacji.

Wyjątek hierarchii klasa

Wszystkie klasy wyjątków dziedziczą java.lang.Exception podklasy.

Klasa Wyjątkiem jest podklasą Throwable klasie. Ponadto do klasy Wyjątek Throwable jest podklasy błędu.

Programy Java zwykle nie złapać błąd. Błąd występuje zazwyczaj wtedy, gdy poważną wadę, są one widoczne na zewnątrz obróbki programu Java.

Środowisko uruchomieniowe Błąd używany do wskazania wystąpi błąd.

Na przykład, pamięć przepełnienie JVM. Ogólnie rzecz biorąc, program nie wyjść z błędu.

Klasa wyjątku ma dwa główne podkategorie: Klasa IOException i klasa RuntimeException.

Wbudowany w klasie Java (następny zostanie wyjaśnione), ma większość zwykłych kontroli i niesprawdzony wyjątku.


Wbudowany w klasie wyjątku Java

Język Java definiuje kilka klas wyjątków w standardowym opakowaniu java.lang.

Standardowe klasy wyjątków wykonawcze są podklasy najczęstszych klas wyjątków. Ponieważ pakiet java.lang jest ładowany domyślnie do wszystkich programów w języku Java, więc większość z klas wyjątków Runtime dziedzicznych zaburzeń mogą być stosowane bezpośrednio.

Według różnych biblioteki klas Java definiuje również szereg innych wyjątków, poniższa tabela wymienia zaznaczone wyjątkiem Java.

nienormalny opis
ArithmeticException Gdy nienormalne warunki pracy, to jest wyjątek. Na przykład liczba całkowita "dzielenie przez zero" wrzucony instancję tej klasy.
ArrayIndexOutOfBoundsException Z nielegalnego dostępu do indeksu tablicy wyrzucane. Jeśli indeks jest ujemny lub większy niż lub równy rozmiar tablicy, indeks jest nielegalne indeksu.
ArrayStoreException Starając się zachować niewłaściwy typ obiektu do tablicy wyjątków rzucanych.
ClassCastException Podczas próby oddać obiekt nie jest instancją podklasy rzucona.
IllegalArgumentException Rzucony w celu wskazania, że ​​metoda została przekazana nielegalne lub nieodpowiednie argument.
IllegalMonitorStateException Wrzucony do wskazania, że ​​wątek próbował czekać na monitorze obiektu lub powiadomić inne obiekty czekają monitora wątek bez monitora określony.
IllegalStateException W przypadku nielegalnych lub nieodpowiednim momencie wywołania w celu wygenerowania sygnału. Innymi słowy, środowiska Java i aplikacja Java nie jest w odpowiednim stanie do żądanej operacji.
IllegalThreadStateException Temat nie jest w odpowiednim stanie, gdy Żądana operacja wymagała rzucona.
IndexOutOfBoundsException To wskazuje indeks sortowania (na przykład sortowania tablicy, ciąg lub wektor) wyrzucane poza zasięgiem.
NegativeArraySizeException Jeśli aplikacja próbuje utworzyć tablicę z ujemnej wielkości, rzucona.
NullPointerException Gdy aplikacja próbuje użyć obiektu w potrzebie lokalnej null po rzuceniu
NumberFormatException Gdy aplikacja próbuje przekonwertować ciąg do typu liczbowego, ale że ciąg nie mogą być konwertowane do odpowiedniego formatu, aplikował anomalię.
SecurityException Przez kierownika bezpieczeństwa zgłasza wyjątek, oznacza naruszenie bezpieczeństwa.
StringIndexOutOfBoundsException Wyjątkiem od tego String wyrzuca metody wskazuje, że wskaźnik jest ujemna albo większa niż rozmiar łańcucha.
UnsupportedOperationException Gdy żądana operacja nie jest obsługiwana rzucona.

Poniższa tabela zawiera Java zdefiniowane w pakiecie java.lang sprawdzone klasy wyjątków.

nienormalny opis
ClassNotFoundException Aplikacja próbuje załadować klasę, nie można znaleźć odpowiedniej klasy rzucona.
CloneNotSupportedException Po wywołaniu Object klasy clone metodę sklonować obiekt, ale klasa obiektu nie może realizować Cloneable interfejs rzucona.
IllegalAccessException Gdy odmówiono dostępu do klasy rzucona.
InstantiationException Gdy spróbujesz użyć Class klasy newInstance utworzyć instancję metody klasy, wyznaczonego obiektu klasy, ponieważ jest to interfejs lub klasa abstrakcyjna nie może być instancja, aplikował anomalię.
InterruptedException Wątek zostaje przerwany przez inny wątek, to jest wyjątek.
NoSuchFieldException Zmienna o nie istnieje
NoSuchMethodException Metoda wniosek nie istnieje

anomalia

Poniższa lista jest główną metodą Throwable klasy:

Nie. Sposób i opis
1 public String getMessage ()
Zwraca szczegółowe informacje na temat wystąpienia wyjątku. Wieść zainicjowany w konstruktorze klasy Throwable.
2 publicznych Throwable getCause ()
Zwraca obiekt, który reprezentuje Throwable powód wyjątku.
3 public String toString ()
Wyniki uzyskane przy zastosowaniu GetMessage () zwraca nazwę klasy Cascade.
4 public void printStackTrace ()
Drukuj toString () wynik i poziom stosu do System.err, czyli strumienia wyjściowego błędu.
5 publicznego StackTraceElement [] getStackTrace ()
Zwraca tablicę zawierającą poziom stosu. 0 indeks elementu reprezentuje wierzchołek stosu, ostatni element stanowi metodę połączenia stosu spód stosu.
6 publicznych Throwable fillInStackTrace ()
Obiekt Throwable stosu jest wypełniona obecnym poziomie poziomie stosu wywołań, dodany do poziomu stosu jakiejkolwiek wcześniejszej informacji.

Złapać wyjątek

Korzystanie spróbować i złapać słów kluczowych może złapać wyjątek. try / catch bloku w miejsce wyjątków, które mogą się pojawić.

Składnia Kod try / catch nazywany jest kod ochrony za pomocą try / catch jest w następujący sposób:

try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

catch zawiera wyjątek, aby uchwycić rodzaj rachunku. Kiedy blok kodu ochrony, gdy wystąpi wyjątek, spróbuj z tyłu bloku catch będą sprawdzane.

Jeśli wyjątek zawarty w bloku catch, wyjątek zostanie przekazany do bloku catch, i przekazać parametr do tej metody jest taka sama.

Przykłady

Poniższy przykład ogłosił tablicę dwóch elementów, gdy kod próbuje uzyskać dostęp trzeci element tablicy, gdy będzie to wyjątek.

// 文件名 : 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");
   }
}

Powyższy kod skompilować i uruchomić następujący wynik:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
Out of the block

Wiele bloków catch

Wiele bloków kodu połowu po bloku kodu nazywa się próbować podążać wielokrotnego przechwytywania.

Stwardnienie Składnia blok catch jest w następujący sposób:

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }

Powyższy kod fragment składa się z trzech bloków catch.

Możesz dodać dowolną ilość bloków catch za instrukcji try.

Jeśli wystąpi wyjątek w kodzie ochrony, jest wyjątek do pierwszego bloku catch.

Jeśli rzucisz typ danych niedopasowania wyjątku ExceptionType1, gdzie zostanie on przechwycony.

Jeśli nie, zostaje ona przeniesiona do drugiego bloku zatrzaskowej.

Więc dopóki wyjątek zostanie złapany przez każdego połowu lub bloku.

Przykłady

Ten przykład pokazuje, jak za pomocą wielokrotnego 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;
}

rzuca / rzut Słowa kluczowe:

Jeśli metoda nie uchwycić sprawdzonej wyjątek, wówczas metoda musi użyć słowa kluczowego wyrzuca do stwierdzenia. generuje słowo kluczowe umieszczony na końcu podpisu metody.

Można również użyć rzut kluczowe wyjątek, czy jest on nowy czy nowo instancja niewoli.

Poniższa deklaracja metoda zgłasza wyjątek RemoteException:

import java.io.*;
public class className
{
   public void deposit(double amount) throws RemoteException
   {
      // Method implementation
      throw new RemoteException();
   }
   //Remainder of class definition
}

Metoda może być uznana rzucić kilka wyjątków, rozdzielając je przecinkami między wieloma wyjątkami.

Na przykład, następujące oświadczenie metoda rzuca RemoteException i InsufficientFundsException:

import java.io.*;
public class className
{
   public void withdraw(double amount) throws RemoteException,
                              InsufficientFundsException
   {
       // Method implementation
   }
   //Remainder of class definition
}

wreszcie kluczowe

Wreszcie słowo kluczowe jest używane do tworzenia bloków kodu po bloku kod usiłuje wykonać.

Czy wystąpi wyjątek wreszcie Kod blok kodu zawsze będzie wykonywany.

Na końcu bloku, można uruchomić oczyścić następstw o ​​charakterze typu zakończenia komunikatu.

W końcu pojawia się blok w bloku catch Wreszcie, składnia jest następująca:

 try{
    // 程序代码
 }catch(异常类型1 异常的变量名1){
    // 程序代码
 }catch(异常类型2 异常的变量名2){
    // 程序代码
 }finally{
    // 程序代码
 }
 

Przykłady

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

Exception thrown  :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

Należy zauważyć, że w następujących sprawach:

  • haczyk nie może istnieć niezależnie od próbie.
  • W try / catch nie zostanie dodany po końcu obowiązkowych wymagań.
  • Nie po bloku try catch nie udało wreszcie zablokować.
  • spróbować złapać wreszcie nie można dodać dowolny kod pomiędzy blokami.

Zestawienie niestandardowych wyjątek

W Javie można dostosować wyjątek. Poniższe punkty muszą pamiętać, aby napisać swoje własne klasy wyjątków.

  • Wszystkie wyjątki muszą być Throwable podklasy.
  • Jeśli chcesz napisać sprawdzony klasę wyjątku, trzeba dziedziczyć klasę wyjątku.
  • Jeśli chcesz napisać klasę wyjątku czasu wykonywania, musisz dziedziczyć klasę RuntimeException.

Można zdefiniować własną klasę wyjątku tak:

class MyException extends Exception{
}

Tylko dziedziczą klasy Exception tworzenia klasy wyjątków są sprawdzane klasy wyjątków.

Poniższa klasa InsufficientFundsException jest klasa wyjątek zdefiniowany przez użytkownika, która dziedziczy z Exception.

Klasa wyjątku oraz wszelkie inne zajęcia, zawiera zmienne i metody.

Przykłady

// 文件名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;
   }
}

Aby pokazać, jak korzystać z naszej niestandardową klasę wyjątku,

W poniższym klasy CheckingAccount zawiera metoda wycofać () generuje InsufficientFundsException wyjątku.

// 文件名称 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;
   }
}

Poniższy program pokazuje, jak zadzwonić depozyt klasy BankDemo CheckingAccount () i wycofania metody ().

//文件名称 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();
      }
    }
}

Kompilowania powyższe trzy pliki i uruchom BankDemo programu, uzyskać wyniki w następujący sposób:

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)

Ogólne wyjątek

To definiuje dwa rodzaje wyjątków i błędów w Javie.

  • JVM (Java Virtual Machine) wyjątek: Wyjątek wyrzucane przez JVM lub błędów. Na przykład: klasa NullPointerException, klasy, klasy ClassCastException ArrayIndexOutOfBoundsException.
  • Wyjątkiem poziomie programu: Program API przez program lub wyrzucane. Na przykład, klasa klasy IllegalArgumentException IllegalStateException.