1. Was ist eine Ausnahme?
Schauen wir uns zunächst das Beispiel in der Abbildung unten an:
In diesem Beispiel existiert der Fehlercode durch Dividierung durch 0. Ausnahme aufgrund der Dividierung durch 0: Arithmexception
HelloException.java
Paket com.yiibai.tutorial.exception; public class helloException {public static void main (String [] args) {System.out.println ("drei"); // Diese Abteilung kein Problem. int value = 10/2; System.out.println ("zwei"); // Diese Abteilung kein Problem. Wert = 10/1; System.out.println ("eins"); // Diese Abteilung hat ein Problem, geteilt durch 0. // Es ist hier ein Fehler aufgetreten. Wert = 10/0; // und der folgende Code wird nicht ausgeführt. System.out.println ("Lass uns gehen!"); }}Ausführen dieses Beispiels führt zu:
Sie können Benachrichtigungen auf dem Konsolenbildschirm sehen. Fehlerbenachrichtigungen sind sehr klar, einschließlich Informationen zu Codezeilen.
Schauen wir uns das folgende Programm durch den Prozess in der folgenden Abbildung an:
Wir werden den Code der oben genannten Ausführungsform ändern.
HellocatchException.java
Paket com.yiibai.tutorial.exception; public class hellocatchException {public static void main (String [] args) {System.out.println ("drei"); // Diese Abteilung kein Problem. int value = 10/2; System.out.println ("zwei"); // Diese Abteilung kein Problem. Wert = 10/1; System.out.println ("eins"); Versuchen Sie {// Diese Abteilung hat ein Problem, geteilt durch 0. // Es ist hier ein Fehler aufgetreten. Wert = 10/0; // und der folgende Code wird nicht ausgeführt. System.out.println ("value =" + value); } catch (AritheMeticexception e) {// Der Code im Catch -Block wird ausgeführt System.out.println ("Fehler:" + e.getMessage ()); // Der Code im Catch -Block wird ausgeführt System.out.println ("Ignore ..."); } // Dieser Code wird ausgeführt System.out.println ("Let's Go!"); }}Ausführen der Beispielergebnisse:
Drei
Zwei
Eins
Fehler: / nach Null
Ignorieren...
Lass uns gehen!
Wir werden das folgende Verfahren wie folgt dem Fluss des Beispielbildes erklären.
2. Ausnahmehierarchie <br /> Dies ist ein Modell des hierarchischen Diagramms der Java -Ausnahmen.
Die höchste Klasse ist: Wurfbar
Die beiden direkten Unterklassen sind Fehler und Ausnahme.
Es gibt eine RunTimeException-Unterklasse in der Ausnahmetransfer, einschließlich Ausnahmen für Kompilierzeit, die in Java nicht überprüft werden. Überprüfen und stornieren Sie die Überprüfung zum Kompilierungszeit, wie im nächsten Abschnitt des Implementierungsbeispiels beschrieben.
Hinweis: Ihre Klasse sollte von zwei Zweigen erben: Fehler oder Ausnahme, nicht direkt aus Throwable.
Die virtuelle Maschine erhöht diesen Fehler, wenn ein dynamisches Link ausfällt oder wenn ein anderer "harter" Fehler der virtuellen Maschine auftritt. Typische Java -Programme fangen keine Fehler auf, sodass Java -Programme keine Fehler werfen. Die meisten Programme werfen und erfassen Objekte, die aus der Ausnahmeklasse stammen. Eine Ausnahme zeigt ein Problem an, diese Probleme sind jedoch keine schwerwiegenden systemischen Probleme. Die meisten Programme, die Sie schreiben, werden Ausnahmen werfen und fangen.
Die Ausnahmeklasse definiert viele Unterklassen im Java -Paket. Diese Unterklassen zeigen, dass verschiedene Arten von Ausnahmen auftreten können. Beispielsweise zeigt negativearraysizeexception an, dass das Programm versucht, ein Array negativer Größe zu erstellen.
Eine besondere Bedeutung der Unterklasse eines Regisseurs in der Java -Sprache: Die RunTimeException -Klasse stellt eine Ausnahme dar, die (während der Laufzeit) in einer virtuellen Java -Maschine auftritt. Ein Beispiel für eine Laufzeitausnahme ist die Nullyiibaierexception -Ausnahme, die angesprochen wird, wenn eine Methode versucht, über eine Nullreferenz auf ein Mitglied eines Objekts zuzugreifen. Nullyiibaierexception kann überall dort erscheinen, wo ein Programm versucht, ein Objekt zu Dereference. Die Vorteile der Überprüfung nach Ausnahme, die häufig bei weitem die Kosten weit überwiegt.
Da die Laufzeitausnahmen allgegenwärtig sind, ist es zwecklos, immer wieder zu versuchen, ständig zu fangen oder festzulegen (unlesbar und unbemerbarer Code), der Compiler ermöglicht die Laufzeitausnahmen, die nicht erfasst und angeben.
Das Java -Paket definiert mehrere RunTimeException -Klassen. Sie können diese Ausnahmen genau wie andere fangen. Es besteht jedoch keine Möglichkeit, festzustellen, dass sie eine Laufzeitausnahme ausgelöst hat. Darüber hinaus können Sie Ihre eigene RunTimeException -Unterklasse erstellen. Laufzeitausnahmen - Die folgende Diskussion enthält eine detaillierte Diskussion darüber, wann und wie die Laufzeitausnahmen verwendet werden. 3.. Verwenden Sie Try-Catch, um Ausnahmen zu behandeln
Schreibklassen von Ausnahme geerbt.
AgeException.java
paket com.yiibai.tutorial.exception.basic; public class AgeException erweitert die Ausnahme. }} Tooyoungexception.javapackage com.yiibai.tutorial.exception.basic; public class tooyoungexception erweitert AgeException {public tooyounGexception (String -Nachricht) {Super (message); }} ToooldException.java
paket com.yiibai.tutorial.exception.basic; public class ToooldException erweitert AgeException {public exception (String message) {super (message); }} Und die statische Methode zur Überprüfung des Alters für die Ageutils -Klasse.
AGEUTILS.JAVA
Paket com.yiibai.tutorial.exception.basic; öffentliche Klasse Ageutils {// Diese Methode überprüft das Alter. // Wenn das Alter weniger als 18 ist, wirft die Methode eine Ausnahme tooyoungexception // Wenn Alter mehr als 40 ausgelöst wird, wirft die Methode eine Ausnahme zu, die die publische statische Void -Prüfung (int Alter) zu einer Ausnahme auswirft, um zu oldException {if (Alter <18) {// Wenn das Alter weniger als 18 ist, wird eine Ausnahme geworfen // Diese Methode endet. Neue Tooyoungexception ("Alter" + Alter + "zu jung"); } else if (Alter> 40) {// Wenn Alter mehr als 40 Jahre alt ist, wird eine Ausnahme geworfen. // Diese Methode endet hier. Wirf neu zuoldException ("Alter" + Alter + "zu alt"); } // Wenn das Alter zwischen 18-40 liegt. // Dieser Code wird ausgeführt. System.out.println ("Alter" + Alter + "OK!"); }} Überprüfen Sie, ob Sie Ausnahmen und nicht überprüfte Ausnahmen untersuchen:
AgeException ist eine Ausnahme, Unterklasse von ToooldException und tooyoungexception2 sind direkte Unterklassen der Altersausnahme, daher sind sie "überprüfte Ausnahme".
Die AGEUTILILS.Checkage (Int) -Methode hat eine Ausnahme ausgelöst und muss ihre Methodendeklarationen über das Schlüsselwort "Auswürfe" auflisten. Oder Sie können mehr Level einwerfen.
Der Standort Ageutils.Checkage (int) muss ebenfalls verarbeitet werden, um die Ausnahme zu fangen oder weiterhin zu werfen.
"Checked Exception" wird von "Java Compiler" überprüft.
Es gibt zwei Optionen:
Trycatchdemo1.java
paket com.yiibai.tutorial.exception.basic; public class ttrycatchdemo1 {public static void main (String [] args) {System.out.println ("Start Recruiting ..."); // age system.out.println überprüfen ("Überprüfen Sie Ihr Alter"); int Alter = 50; versuche {ayutils.Checkage (Alter); System.out.println ("Sie passieren!"); } catch (tooyoungexception e) {// Mach hier etwas .. system.out.println ("Du bist zu jung, nicht passieren!"); System.out.println (e.getMessage ()); } catch (tooldException e) {// Mach hier etwas .. system.out.println ("Du bist zu alt, nicht passieren!"); System.out.println (e.getMessage ()); }}} Im folgenden Beispiel werden wir die Ausnahme (Hyperexception -Klasse) durch die übergeordnete Klasse fangen.
Trycatchdemo2.java
paket com.yiibai.tutorial.exception.basic; public class ttrycatchDemo2 {public static void main (String [] args) {System.out.println ("Start Recruiting ..."); // age system.out.println überprüfen ("Überprüfen Sie Ihr Alter"); int Alter = 15; Versuchen Sie, {// hier kann ToooldException oder tooyoungexception ayutils.Checkage (Alter) werfen; System.out.println ("Sie passieren!"); } catch (AgeException e) {// Wenn eine Ausnahme auftritt, wird eine Art von AltersException // Dieser Catch -Block wird ausgeführt. System.out.println (e.getMessage ()); }}} Unterschiedliche Ausnahmen können auch in Blöcken gruppiert werden, um sie zu verarbeiten, wenn sie auf die gleiche Weise mit dem logischen Programm behandelt werden.
Trycatchdemo3.java
paket com.yiibai.tutorial.exception.basic; public class ttrycatchDemo3 {public static void main (String [] args) {System.out.println ("Start Recruiting ..."); // age system.out.println überprüfen ("Überprüfen Sie Ihr Alter"); int Alter = 15; Versuchen Sie, {// hier kann ToooldException oder tooyoungexception ayutils.Checkage (Alter) werfen; System.out.println ("Sie passieren!"); } catch (tooyoungexception | ToooldException e) {// multi -Ausnahmen in einem Block fangen. System.out.println ("Ihr Alter ungültig, Sie passieren nicht"); System.out.println (e.getMessage ()); }}} V
Wir sind es gewohnt, Fehler durch Try-Catch-Blöcke zu fangen. Versuchen Sie es mit dem Catch-final, um Ausnahmen vollständig zu behandeln.
Versuchen Sie {// Machen Sie hier etwas} catch (exception1 e) {// Machen Sie hier etwas} catch (exception2 e) {// Machen TryCatchFinallydemo.java
paket com.yiibai.tutorial.exception.basic; public class telcatchFinallyDemo {public static void main (String [] args) {String text = "001234a2"; int value = tointeger (text); System.out.println ("value =" + value); } public static int toIteger (String text) {try {system.out.println ("analysieren text:" + text); // Eine Ausnahme kann hier ausgelöst werden (numberFormatexception). int value = Integer.ParseInt (Text); Rückgabewert; } catch (numberFormatexception e) {// im Fall von 'Text' ist keine Nummer. // Dieser Fangblock wird ausgeführt. System.out.println ("Zahlenformatausnahme" + e.getMessage ()); // gibt 0 zurück, wenn numberFormatexception auftritt, return 0; } endlich {system.out.println ("End analysieren Text:" + text); }}}Dies ist der Prozess des Programms. Der endgültige Block wird immer unter allen Umständen ausgeführt.
5. Umgebung Ausnahme
Person.java
Paket com.yiibai.tutorial.exception.wrap; Public Class Person {public static Final String male = "männlich"; Public Static Final String weiblich = "weiblich"; privater Zeichenfolge Name; privates String -Geschlecht; privates int Alter; öffentliche Person (Zeichenfolge Name, String -Geschlecht, int Alter) {this.name = name; this.Geper = Geschlecht; this.age = Alter; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String getGerTer () {Return Gender; } public void setGender (String -Geschlecht) {this.gender = Gender; } public int getage () {return ay; } public void setage (int age) {this.age = älter; }} Genderexception.java
Paket com.yiibai.tutorial.exception.wrap; // Gender Exception.public class genderexception erweitert die Ausnahme {public genderexception (String meldung) {Super (message); }} ValateException Class -Paket hat andere Ausnahmen.
Valatexception.java
Paket com.yiibai.tutorial.exception.wrap; public class validateException erweitert die Ausnahme {// Wickeln Sie eine Ausnahme public validateException (Ausnahme e) {Super (e); }} ValidateUtils.java
Paket com.yiibai.tutorial.exception.wrap; import com.yiibai.tutorial.exception.basic.Aageutils; öffentliche Klasse Validutils {public static void Checkperson (Person) löscht ValidesException {try {// Check -Age aus. // gültig, wenn zwischen 18-40 // diese Methode zu, tooyoungexception zu werfen kann. AGEUTILS.Checkage (Person.getage ()); } catch (Ausnahme e) {// Wenn nicht gültig // diese Ausnahme durch ValateException einwickeln und neue Valatexception (e) werfen; } // Wenn diese Person weiblich ist, dh ungültig. if (person.getGender (). Equals (Person.Female)) {genderexception e = new genderexception ("nicht akzeptieren Frauen"); neue validateException (e) werfen; }}} WrapperexceptionDemo.java
Paket com.yiibai.tutorial.exception.wrap; öffentliche Klasse WrapperexceptionDemo {public static void main (String [] args) {// Ein Teilnehmer -Rekrutierung. Person Person = neue Person ("heiraten", Person.Female, 20); Versuchen Sie, hier können Ausnahmen auftreten. ValidateUtils.Checkperson (Person); } catch (ValateException Wrap) {// Die reale Ursache erhalten. // kann tooyounGexception sein, zu auch, auch Genderexception Exception cause = (Ausnahme) Wrap.getCause (); if (cause! = null) {system.out.println ("nicht passieren, cause:" + cause.getMessage ()); } else {System.out.println (Wrap.getMessage ()); }}}}6. RunTimeException und subklassen die RunTimeException -Klasse und ihre Unterklassen sind beide "ungeprüfte Ausnahmen". Es wird nicht zum Kompilierzeit vom Java -Compiler überprüft. In einigen Fällen können Sie von diesem Zweig erben, um Ihre eigenen Ausnahmen zu schreiben.
Im Folgenden finden Sie einige Klassen der RunTimeException -Zweigstelle (natürlich ist dies nicht alles).
Einige Beispiele für den Umgang mit Ausnahmen dieser Art:
6.1-NullyibaierException
Dies ist die häufigste Ausnahme und verursacht normalerweise Fehler im Programm. Die Ausnahme wird ausgelöst, wenn Sie eine Methode aufrufen oder auf das Feld eines leeren Objekts zugreifen.
Nullyiibaierexceptiondemo.java
Paket com.yiibai.tutorial.exception.runtime; öffentliche Klasse NullyibaierexceptionDemo {// hier ist hier eine Methode, die die NULL -Zeichenfolge zurückgeben kann. public static String getSstring () {if (1 == 2) {return "1 == 2 !!"; } return null; } public static void main (String [] args) {// Dies ist ein Objekt, das nicht null verweist. String text1 = "Hallo Ausnahme"; // Rufen Sie die Methode auf, die die Zeichenfolgelänge abruft. int länge = text1.length (); System.out.println ("Länge text1 =" + Länge); // Dies ist ein Objekt, das verweist. String text2 = getString (); // Rufen Sie die Methode auf, die die Zeichenfolgelänge abruft. // nullyiibaierexception wird hier auftreten. // Es handelt sich um eine Ausnahme zur Laufzeit (Art der RunTimeException) // Javac Compiler zwingt Sie nicht, einen Try-Catch-Block zu verwenden, um IT-Länge = text2.Length () zu verarbeiten. System.out.println ("Finish!"); }}Ergebnisse beim Ausführen des Beispiels:
In Wirklichkeit kann Try-Catch verwendet werden, um diese Ausnahme zu fangen und zu behandeln, wie bei der Behandlung anderer Ausnahmen. Dies ist jedoch mechanisch und normalerweise sollten wir überprüfen, ob das Objekt vor der Verwendung nicht null ist.
Sie können den oben genannten Code korrigieren, um ihn dem Folgenden ähnlich zu machen, um Null -Zeiger -Ausnahmen zu vermeiden:
// Dies ist ein Null-Objekt.
6.2- arrayIndexofoundException
Diese Ausnahme tritt auf, wenn Sie versuchen, mit einem ungültigen Index auf ein Array -Element zugreifen zu können. Beispielsweise hat ein Array 10 Elemente zugreifen, aber Sie zugreifen mit Index 20 auf Elemente.
ArrayIndexofBoundSexceptionDemo.java
Paket com.yiibai.tutorial.exception.runtime; public class arrayIndexofBoundSexceptionDemo {public static void main (String [] args) {String [] strs = new String [] {"One", "Two", "Three"}; // Zugriff auf das Element hat Index 0. String str1 = strs [0]; System.out.println ("String at 0 =" + str1); // Zugriff auf das Element hat Index 5. // ArrayIndexofBoundSexception tritt hier auf. String str2 = strs [5]; System.out.println ("String at 5 =" + str2); }} Um ArrayIndexOfBoundSexception zu vermeiden, sollten wir mehr über die Überprüfung des Arrays als die Verwendung von Try-Catch gehen.
if (strs.length> 5) {string str2 = strs [5]; System.out.println ("String at 5 =" + str2);} else {System.out.println ("Keine Elemente mit Index 5");};Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.