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.