Latest web development tutorials

Java Ausnahmebehandlung

Ausnahmen sind einige Fehler in dem Programm, aber nicht alle Fehler sind Ausnahmen, und manchmal können Fehler vermieden werden.

Zum Beispiel, weniger Code ein Semikolon, dann aus den Ergebnissen führen, ist falsch java.lang.Error aufzufordern, wenn Sie System.out.printin verwenden (11/0), dann tun Sie, weil Sie einen Divisor verwenden 0 Es wird java.lang.ArithmeticException Ausnahme geworfen.

Es gibt viele Gründe für eine Ausnahme auftritt, in der Regel beinhaltet die folgenden Kategorien:

  • Benutzereingabe illegal Daten.
  • Zum Öffnen einer Datei nicht existiert.
  • Netzwerk-Kommunikationsverbindung unterbrochen oder JVM Speicherüberlauf.

Diese Ausnahmen entweder durch Benutzerfehler verursacht einige Verfahrensfehler verursacht, weil es gibt auch andere physikalische Fehler. -

Um zu verstehen, Handhabung Java-Ausnahme ist, wie es funktioniert, müssen Sie die folgenden drei Arten von Ausnahmen zu haben:

  • Geprüfte Ausnahme: die meisten Vertreter geprüfte Ausnahme ist eine Ausnahme durch Benutzerfehler oder ein Problem, es ist der Programmierer nicht absehbar. Zum Beispiel, wenn Sie eine Datei zu öffnen, nicht vorhanden ist, wird eine Ausnahme auftritt, kann die Ausnahme nicht nur zum Zeitpunkt der Kompilierung ignoriert werden.
  • Ausnahme ist wahrscheinlich ein Programmierer zu vermeiden anormalen Betrieb sein: Laufzeit Ausnahme. Im Gegensatz zu der geprüfte Ausnahme kann die Runtime-Ausnahme bei der Kompilierung ignoriert werden.
  • Fehler: Fehler ist nicht abnormal, sondern von der Frage der Kontrolle des Programmierers. Fehler im Code werden in der Regel ignoriert. Wenn zum Beispiel ein Stapelüberlauf tritt ein Fehler auf, können sie bei der Kompilierung nicht überprüfen.

Ausnahmeklassenhierarchie

Alle Ausnahmeklassen erben von java.lang.Exception Unterklasse.

Exception-Klasse ist eine Unterklasse von Throwable Klasse. Neben der Ausnahmeklasse, Throwable gibt es eine Unterklasse von Fehler.

Java-Programme in der Regel nicht den Fehler abzufangen. Fehler tritt in der Regel, wenn ein schwerer Fehler, sie außerhalb Java-Programmbearbeitung sichtbar sind.

Fehler-Laufzeitumgebung verwendet, um einen Fehler anzuzeigen auftritt.

Zum Beispiel JVM Speicherüberlauf. Im Allgemeinen wird das Programm nicht den Fehler zu beheben.

Exception-Klasse verfügt über zwei Hauptuntergruppen: IOException-Klasse und Runtime Klasse.

Built-in Java-Klasse (die nächste erläutert), hat es die meisten der üblichen Kontrollen und ungeprüfte Ausnahme.


Built-in Java-Ausnahmeklasse

Java-Sprache definiert mehrere Ausnahmeklassen in der Standard-Paket java.lang.

Standard-Runtime-Ausnahmeklassen sind Unterklassen der häufigsten Ausnahmeklassen. Da java.lang-Paket ist standardmäßig auf allen Java-Programme geladen werden, so dass die meisten von den Laufzeitausnahmeklassen geerbt Anomalien direkt verwendet werden können.

Nach verschiedenen Java-Klassenbibliothek definiert auch eine Reihe weiterer Ausnahmen Die folgende Tabelle listet die Java ungeprüfte Ausnahme.

abnormal Beschreibung
ArithmeticException Wenn die anormalen Betriebsbedingungen wird diese Ausnahme ausgelöst. Zum Beispiel kann eine ganze Zahl "Division durch Null" eine Instanz dieser Klasse geworfen.
ArrayIndexOutOfBoundsException Mit einem illegalen Index ein Array geworfen zuzugreifen. Wenn der Index negativ oder größer als oder gleich Größe des Arrays ist der Index illegal Index.
Arrays Der Versuch, die falsche Art von Objekt in ein Array von Ausnahmen geworfen zu speichern.
Classcast Wenn Sie versuchen, ein Objekt zu werfen ist nicht eine Instanz einer Unterklasse Geworfen.
Illegal Geworfen, um anzuzeigen, dass das Verfahren eine Unerlaubten Argument übergeben wurde.
IllegalMonitorStateException Geworfen, um anzuzeigen, dass ein Thread auf ein Objekt des Monitors zu warten, versucht hat, oder zu benachrichtigen, andere Objekte warten Fadenwächter ohne den Bildschirm angegeben.
Illegal Im Falle einer illegalen oder unangemessenen Zeit zum Aufrufen einer Methode, ein Signal zu erzeugen. Mit anderen Worten ist die Java-Umgebung oder Java-Anwendung nicht in einem geeigneten Zustand für den angeforderten Vorgang.
IllegalThreadStateException Das Thema ist nicht in einem angemessenen Zustand, wenn angeforderte Operation geworfen erforderlich.
IndexOutOfBoundsException Es gibt eine Art Index (wie ein Array sortieren, um einen String oder Vektor) außer Reichweite geworfen.
Negative Wenn eine Anwendung versucht, ein Array mit negativen Größe zu schaffen, Geworfen.
Nullpointer Wenn eine Anwendung versucht , ein Objekt in der Notwendigkeit der lokalen verwenden null , wenn Geworfen
Number Wenn eine Anwendung versucht, eine Zeichenfolge in einen numerischen Typ zu konvertieren, aber dass die Zeichenfolge nicht in das entsprechende Format konvertiert werden, Klöpper die Anomalie aus.
Security Mit der Sicherheitsmanager eine Ausnahme auslöst, gibt es eine Sicherheitsverletzung.
StringIndexOutOfBoundsException Diese Ausnahme von der String wirft Methoden , um anzuzeigen , dass ein Index entweder negativ oder größer als die Größe des Strings ist.
UnsupportedOperationException Wenn der angeforderte Vorgang wird ausgelöst, nicht unterstützt.

Die folgende Tabelle listet die Java im Paket java.lang definiert Ausnahmeklassen geprüft.

abnormal Beschreibung
ClassNotFoundException Anwendung versucht, die Klasse zu laden, können Sie nicht die entsprechende Klasse finden Geworfen.
CloneNotSupportedException Wenn Sie den Anruf Object clone Methode ein Objekt zu klonen, aber die Klasse des Objekts kann nicht implementieren Cloneable eine Schnittstelle Geworfen.
Illegal Wenn der Zugriff auf eine Klasse Geworfen verweigert.
InstantiationException Wenn Sie versuchen , die zu verwenden Class Klasse newInstance eine Instanz einer Klasse Methode erstellen, welche als Klasse - Objekt , da es sich um eine Schnittstelle oder eine abstrakte Klasse ist , kann nicht instanziert werden, Klöpper die Anomalie aus.
InterruptedException Ein Thread von einem anderen Thread unterbrochen wird, wird diese Ausnahme ausgelöst.
NoSuchFieldException Variable angefordert existiert nicht
NoSuchMethodException Methode angefordert nicht vorhanden

Anomalie

Die folgende Liste ist die wichtigste Methode Throwable Klasse:

Nein . Verfahren und Beschreibung
1 public String getMessage ()
Liefert detaillierte Informationen über die Ausnahme aufgetreten ist. Die Nachricht in den Konstruktor von Throwable Klasse initialisiert.
2 public Throwable getCause ()
Gibt ein Throwable-Objekt, das den Grund für die Ausnahme darstellt.
3 public String toString ()
Ergebnisse der getMessage () gibt den Namen der Klasse von Cascade verwenden.
4 public void print ()
Drucken toString () Ergebnis und Stack-Ebene zu System.err, nämlich die Fehlerausgabestream.
5 public StackTraceElement [] getStackTrace ()
Es gibt ein Array einen Stack-Ebene enthält. 0 Index Element die Oberseite des Stapels darstellt, das letzte Element stellt einen Methodenaufruf Stapel Unterseite des Stapels.
6 public Throwable fillInStackTrace ()
Throwable Objekt-Stack mit dem aktuellen Niveau des Call-Stack-Ebene gefüllt ist, hinzugefügt, um die Stack-Ebene eines früheren Informationen.

Fangen Sie die Ausnahme

Verwenden Sie versuchen und fangen Schlüsselwörter, die Ausnahme zu fangen. try / catch-Block anstelle Ausnahmen, die auftreten könnten.

Syntax try / catch-Block-Code wird einen Sicherungscode mit try / catch genannt ist wie folgt:

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

Catch-Anweisung enthält eine Ausnahme die Art der Aussage zu erfassen. Wenn der Schutz Codeblock, wenn eine Ausnahme auftritt, versuchen wird, die Rückseite des catch-Block überprüft werden.

Wenn die Ausnahme im catch-Block enthalten ist, wird die Ausnahme von der catch-Block übergeben werden, und übergeben ein Parameter für diese Methode ist die gleiche.

Beispiele

Das folgende Beispiel ist ein Array mit zwei Elementen deklariert, wenn der Code das dritte Element des Arrays zuzugreifen versucht, wenn es eine Ausnahme werfen.

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

Der obige Code kompilieren und ausführen die folgende Ausgabe:

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

Mehrere catch-Blöcke

Eine Vielzahl von Fangcodeblöcke nach dem Codeblock einen Versuch genannt mehrere Capture zu folgen.

Mehrere catch-Block-Syntax ist wie folgt:

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

Der obige Code-Schnipsel enthält drei catch-Blöcke.

Sie können hinter dem try-Anweisung eine beliebige Anzahl von Catch-Blöcke hinzufügen.

Wenn eine Ausnahme in der Schutzcode auftritt, wird eine Ausnahme von der ersten catch-Block geworfen.

Wenn Sie den Datentyp Mismatch Ausnahme von ExceptionType1 werfen, wo es aufgenommen wird.

Wenn nicht, wird es auf den zweiten catch-Block übertragen werden.

Also, bis die Ausnahme von jedem Fang oder Block abgefangen.

Beispiele

Dieses Beispiel zeigt, wie mehrere try / catch verwenden.

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

wirft / throw Stichwort:

Wenn eine Methode eine geprüfte Ausnahme nicht erfassen, muss die Methode verwenden, die Würfe Schlüsselwort zu erklären. wirft Schlüsselwort am Ende der Methodensignatur platziert.

Sie können auch das Schlüsselwort throw verwenden eine Ausnahme werfen, ob es neu ist oder neu aufgenommene instanziiert.

Die folgende Methode Erklärung wirft eine Remote Ausnahme:

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

Ein Verfahren kann durch ein Komma zwischen mehreren Ausnahmen mehrere Ausnahmen zu werfen, getrennt deklariert werden.

Zum Beispiel wirft die folgende Methode Erklärung Remote und InsufficientFundsException:

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

schließlich Stichwort

schließlich Schlüsselwort wird verwendet, um die Codeblöcke zu erstellen, nachdem der Codeblock auszuführen versuchen.

Unabhängig davon, ob eine Ausnahme auftritt, wird schließlich Code-Block-Code immer ausgeführt werden.

Im finally-Block, können Sie die Zeit nach der Natur von der Art der Beendigung Anweisung bereinigen laufen.

schließlich erscheint Block im catch-Block Schließlich ist die Syntax ist wie folgt:

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

Beispiele

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

Die obigen Beispiele kompilierten Ergebnisse sind wie folgt:

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

Beachten Sie, dass die folgenden Punkte:

  • Fang kann nicht unabhängig von dem Versuch bestehen.
  • Im try / catch-Block wird nach endlich verbindlichen Anforderungen nicht hinzugefügt.
  • Nicht nach dem Try-Catch-Block auch nicht endgültig blockieren.
  • versuchen, zu fangen, schließlich kann jeder Code zwischen den Blöcken nicht hinzufügen.

Statement benutzerdefinierte Ausnahme

In Java können Sie Ausnahme anpassen. Die folgenden Punkte müssen sich erinnern, Ihre eigenen Ausnahmeklassen zu schreiben.

  • Alle Ausnahmen müssen Throwable Subklassen sein.
  • Wenn Sie eine geprüfte Ausnahme Klasse zu schreiben möchten, müssen Sie Exception-Klasse zu erben.
  • Wenn Sie eine Laufzeitausnahmeklasse zu schreiben möchten, müssen Sie Runtime Klasse zu erben.

Sie können Ihre eigene Exception-Klasse wie folgt definieren:

class MyException extends Exception{
}

Nur vererben Exception-Klasse zu erstellen Ausnahmeklassen sind Ausnahmeklassen geprüft.

Die folgende InsufficientFundsException Klasse ist eine benutzerdefinierte Exception-Klasse, die von Exception erbt.

Eine Ausnahmeklasse und alle anderen Klassen, enthält Variablen und Methoden.

Beispiele

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

Um zu demonstrieren, wie unsere eigene Exception-Klasse zu verwenden,

In der folgenden CheckingAccount Klasse enthält eine zurückziehen () -Methode eine Ausnahme InsufficientFundsException wirft.

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

Das folgende Programm zeigt, wie BankDemo CheckingAccount Klasse Kaution () und zurückziehen () Methode aufzurufen.

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

Stellen Sie die drei oben genannten Dateien, und das Programm BankDemo laufen, erhalten die Ergebnisse wie folgt:

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)

Allgemeine Ausnahme

Es definiert zwei Arten von Ausnahmen und Fehler in Java.

  • JVM (Java Virtual Machine) Ausnahme: Ausnahme von der JVM oder Fehler ausgelöst. Zum Beispiel: Nullpointer Klasse, ArrayIndexOutOfBoundsException Klasse, Klasse Classcast.
  • Programmebene Ausnahme: API - Programm durch das Programm oder geworfen. Zum Beispiel Klasse Illegal, Illegal Klasse.