Wie man eine Ausnahme in Java macht

Wie man eine Ausnahme in Java macht
Eine Ausnahme ist ein potenzieller Fehler, von dem das Java -System das Java -Programm signalisiert. Wenn die Ausnahme (Fehler) nicht behandelt wird, wird der betreffende Thread nicht mehr im Betrieb eingestellt. Wenn das Programm Single-Threaded wäre, würde das Programm einstellen, den Betrieb zu beenden. Betrachten Sie das folgende Programm: öffentliche Klasse Theclass
public static void main (String [] args)
System.aus.println ("gesehen 1");
int numerator = 6;
int nenner = 0;
int quotient = Zähler / Nenner;
System.aus.println ("gesehen 2");
System.aus.println (quotienten);

Dieses Programm versucht bei der vierten Aussage in der Main () -Methode durch 0 zu teilen. In der Mathematik sollte keine Zahl durch 0 geteilt werden. Computer erlauben dies auch nicht. Dieses Programm sollte „Sehen 1“ ausdrucken. Wenn die Teilung durch Null vom Computer möglich ist, sollte das Programm „Sehen 2“ drucken und dann den Quotienten von 6 geteilt durch Null drucken.

Dieses Programm wird vom Javac -Compiler erfolgreich zusammengestellt. Wenn das Programm jedoch von der Java Virtual Machine (Betriebssystem) ausgeführt wird, wird „gesehen 1“ gedruckt, und das Programm stoppt bei der vierten Anweisung, wobei die Teilung von Null erwartet wird, wo (wo und dann) eine Fehlermeldung ist ausgestellt (angezeigt). Das Programm beendet die Ausführung bei der Abteilung Anweisung von Zero, druckt eine Fehlermeldung und beendet das Betrieb. Danach werden die letzten beiden Aussagen nicht ausgeführt (nicht arbeiten).

Wenn dies jedoch eine Multiplikation mit Null wäre, was zulässig ist, wären die letzten beiden Aussagen ausgeführt worden. Dieser Artikel enthält die Grundlagen des Werfens und der Behandlung einer Ausnahme in Java.

Handhabungsfehler

Bei Java ist es möglich, einen Fehler wie die Aufteilung von Null mit einfachem Code zu bewältigen. Damit die Aussagen (Codierung) nach dem Betrieb des Fehlers (ausgeführt werden sollten). Was ist der Fehler hier? - Der Fehler hier ist Division durch Null. Der Code (Lösung) des Programmierers sollte nicht zulassen, dass der Fehler stattfinden. Der Programmierer muss so codieren, was als Fehler bezeichnet wird, was ein neues Ausnahmebobjekt ist. Das Ausnahmeobjekt muss gefangen werden. Wenn das Ausnahmeobjekt gefangen wird, muss sich das Programm davon erholen. Das Wiederherstellen von einem Fehler bedeutet, die Ausnahme zu bewältigen.

Die Ausnahme -Bibliotheksklasse übernimmt den Fehler mehr als den Programmierer. Die Ausnahmeklasse muss zu Beginn des Programms nicht importiert werden. Diese Einfuhr erfolgt automatisch ohne die Hilfe des Programmierers.

Die Ausnahmeklasse

In Java gibt es zwei Hauptfehlerbehandlungsklassen: die Ausnahmeklasse und die Fehlerklasse. Dieser Artikel befasst sich nur mit der Ausnahmeklasse. Als Charakter kennt die Ausnahmeklasse gewöhnliche Fehler wie Division durch Null und unerwünschte Nullwerte in einer wörtlichen Saite.

Wenn ein neues Ausnahmeobjekt ausgeworfen wird, würde die Ausnahmeklassenbibliothek den Fehler kennen. Wenn es sich um einen gewöhnlichen Fehler handelt. Die Ausnahmeklasse muss zu Beginn des Programms nicht importiert werden. Diese Einfuhr erfolgt automatisch ohne die Hilfe des Programmierers.

Die Java -Aussage -Aussage

Die Versuchserklärung ist eine zusammengesetzte Aussage, die aus dem Versuch und einem Fangblock besteht. In vereinfachter Form ist die Syntax:

versuchen
//Problemstellung;
Neue Ausnahme () werfen;
* Anweisungen, wenn kein Fehler auftritt *

fangen (Ausnahme E)
System.aus.println ("Ausnahmenachricht:" + e.getMessage ());

Versuch ist ein reserviertes Wort; Fang ist ein reserviertes Wort. Der Versuch hat die Problemaussage. Eine Aussage wie,

int quotient = Zähler / Nenner;

ist eine Problemaussage. Wenn der Nenner nicht Null ist, tritt kein Fehler auf. Wenn der Nenner Null ist, ist das ein Fehler. Die Wurfanweisung wäre normalerweise,

Neue Ausnahme () werfen;

Diese Wurfanweisung sollte sofort nach der Problemaussage kommen. Wenn ein Fehler auftritt, wirft die Throw -Anweisung ein neues Ausnahmeobjekt aus. Beachten Sie die Klammern. Wenn der Nenner 0 ist, wird ein neues Ausnahmeobjekt geworfen. Unterhalb der Wurfanweisung finden Sie andere Aussagen, die ausgeführt würden, wenn kein Fehler aufgetreten sind.

Die obige Fangblock hat eine Aussage. Es kann mehr haben. Die Wurfanweisung im Try-Block wirft ein Ausnahmebobjekt, das in den Klammern der Catch-Block-Signatur gefangen ist, für die weitere Verarbeitung innerhalb seines Blocks aus. Diese Aktivität ähnelt einem Methodenaufruf, wobei ein Argument von den Klammern der Methodenimplementierung zur weiteren Verarbeitung im Block der Methode empfangen wird.

Denken Sie daran, dass das Ausnahmeobjekt verschiedene Arten von gewöhnlichen Fehlern erkennen und mit ihnen umgehen kann. Das Ausnahmeobjekt hat die Methode, getMessage (). Diese Methode gibt eine Nachricht zurück, die der Benutzer als Ursache des Fehlers versteht. Dieser Methode-Aufruf wird im Fangblock verwendet.

Das folgende Programm setzt die Aussageerklärung mit dem oben genannten Problem der Division durch Null in die Praxis um:

öffentliche Klasse Theclass
public static void main (String [] args)
System.aus.println ("gesehen 1");
int numerator = 6; int nenner = 0; int quotient;
versuchen
if (nenner == 0)
quotient = Zähler / Nenner;
Neue Ausnahme () werfen;

anders
quotient = Zähler / Nenner;
System.aus.println ("gesehen 2");
System.aus.println (quotienten);

fangen (Ausnahme E)
System.aus.println ("Ausnahmenachricht:" + e.getMessage ());

System.aus.println ("Fortsetzung");

Der Try-Block hat eine If-Compound-Aussage. Der If-Teil würde die Problemanweisung ausführen, wenn der Nenner Null ist. Der sonstige Teil würde die Problemanweisung ausführen, wenn kein Fehler auftreten würde, wenn der Nenner nicht Null ist. Dies bedeutet, dass der Programmierer die Einstellung des Ausnahmebehandlungsschemas leiten muss. In diesem Fall wurde die Problemanweisung zweimal getippt: einmal im IF-Teil und einmal in der sonstigen Partie. Der Problemaussage geht nicht int voraus, da der Quotient vor der Versuchserklärung deklariert wurde.

In der Try-Block befindet sich die Wurfanweisung knapp unter der Problemanweisung im IF-Teil der IF-Compound-Anweisung. Es ist nicht in der Anweisung der IF-Compound-Anweisung. Es muss nicht da sein, weil der sonstige Teil der Situation ist, in der der Nenner (Operand) nicht Null ist (kein Problem hat).

Lesen Sie das obige Programm durch. Der Zähler ist 6. Wenn der Nenner 2 wäre, wäre die Ausgabe gewesen:

gesehen 1
gesehen 2
3
Geht weiter

Dies bedeutet, dass der andere Teil der IF-Compound-Anweisung ausgeführt wurde, nicht der IF-Teil der Anweisung If-Compound. Tatsächlich wurde der IF-Teil (Code) der IF-Compound-Anweisung nicht ausgeführt, da der Nenner nicht Null war. Der Rest des Code im Try-Block wurde ausgeführt. Der Rest des Code im Try-Block soll ausgeführt werden.

Wenn der Nenner 0 ist, erzeugt das Programm die Ausgabe:

gesehen 1
Ausnahmenachricht: / bis Null
Geht weiter

In dieser Situation wurde nur der Code im If-Teil des Try-Blocks ausgeführt. Dies bedeutet, dass die Wurfanweisung ausgeführt wurde. Der sonstige Teil und der Code unterhalb der Anweisung If-Compound wurden nicht ausgeführt. Sie werden normalerweise nicht in dieser Situation ausgeführt.

Der Fangblock wird nicht ausgeführt, wenn es kein Problem gibt. Jetzt wurde der Fangblock ausgeführt. Das heißt, der einzelne Anweisungscode im Catch-Block wurde ausgeführt. Das neue Ausnahmeobjekt wird geworfen, wurde als e empfangen. Die GetMessage () -Methode des Objekts, die die gewöhnlichen Fehler (einschließlich des Fehlers von Division by-Null) kennt, gab die Nachricht „/ nach Null“ zurück.

Mit dieser zurückgegebenen Meldung würde der Benutzer wissen, dass ein Fehler von Division zu Null aufgetreten ist und er behandelt wurde. Die Handhabung bedeutet hier, dass das Programm Division zu Null keinen Schaden zugefügt hat, und obwohl der Rest des Code unter dem Fehlerpunkt in der Anweisung der Try-Compound-Anweisung nicht ausgeführt wird, der Code unter dem Versuch. zusammengesetzte Anweisung würde ausgeführt. Wenn das Handhabungsschema nicht vorhanden wäre, hätte das Programm beendet, und ein Code unten, der nicht in der Anweisung für Try-Compound gewesen wäre, wäre nicht ausgeführt worden.

Ausnahme mit einer Methode werfen

In Java kann die Wurfausnahmeerklärung eine Ausnahme in den Try-Block machen, wie oben dargestellt. Eine Methode kann auch eine Ausnahme ausgeben, jedoch mit einer anderen Syntax, die immer noch mit dem Try-Block zusammenhängt. Der Kern des Try-Block-Codes befindet sich jetzt im Methode-Körper und nicht im Try-Block. Das folgende Programm wiederholt die oben genannte, aber mit einer Methode, die die Ausnahme auswirft. Die Klasse mit der Methode -Implementierung lautet:

Klasse aclass
int mthd (int nume, int deno) löst Ausnahme aus
int quoti = nume / deno;
Rückgabequote;

Der Hauptcode in der Methode hier ist die Problemanweisung. Die Problemaussage befindet sich nicht mehr im Versuch (unten) (unten). Die Problemanweisung wurde einmal, hier und für das gesamte Programm (nicht zweimal tippt) getippt). Der Wurfausdruck ist jetzt anders. Es ist,

wirft Ausnahme aus

Verlängerung der Methodensignatur rechts. "Wirf" hier ist "Throws", mit einem s. Die Ausnahme hat hier nicht die Klammern.

Im gesamten Programm ist die IF-Compound-Erklärung nun nicht erforderlich. Der Körper der Methode und die „Ausnahmefälle“ dienen dem Zweck der Semantik der IF-ELSE-Verbindungsaussage. Die Hauptklasse wird:

öffentliche Klasse Theclass
public static void main (String [] args)
System.aus.println ("gesehen 1");
int numerator = 6; int nenner = 0; int quotient;
versuchen
Aclasseobj = new Aclass ();
quotient = eobj.MTHD (Zähler, Nenner);
System.aus.println ("gesehen 2");
System.aus.println (quotienten);

fangen (Ausnahme E)
System.aus.println ("Ausnahmenachricht:" + e.getMessage ());

System.aus.println ("Fortsetzung");

Es hat immer noch die Aussage für Try-Catch-Verbindungen. Die Problemaussage ist jedoch nicht hier und wird nicht zweimal getippt. Die IF-ELSE-Verbindungsaussage ist ebenfalls nicht hier. Es wird nirgendwo im Programm benötigt. Die Ausgabe mit seiner Fehlermeldung ist die gleiche wie zuvor, ich.e.

gesehen 1
Ausnahmenachricht: / bis Null
Geht weiter

Das Verhalten des vollständigen Programms ist wie zuvor.

Die endgültige Klausel

Die Aussageerklärung enthält drei Klauseln: die Versuchsklausel, die Fangklausel und die endgültige Klausel. Es kann mehr als eine Fangklausel geben - später siehe. Der endgültige Block liegt am Ende der Anweisung Try-Compound, und es ist so, dass der Programmierer eine Nachricht an den Benutzer weiterleitet, dass der mögliche Fehler behandelt wurde. Die Codierung der endgültigen Klausel ist optional. Der folgende Code zeigt eine Verwendung der endgültigen Klausel für das obige Programm:

System.aus.println ("gesehen 1");
int numerator = 6; int nenner = 0; int quotient;
versuchen
Aclasseobj = new Aclass ();
quotient = eobj.MTHD (Zähler, Nenner);
System.aus.println ("gesehen 2");
System.aus.println (quotienten);

fangen (Ausnahme E)
System.aus.println ("Ausnahmenachricht:" + e.getMessage ());

Endlich
System.aus.println ("Jeder Fehler wurde behandelt.");

Wenn der Nenner 2 ist, wäre die Ausgabe:

gesehen 1
gesehen 2
3
Jeder Fehler wurde behandelt.
Geht weiter

Wenn der Nenner 0 ist, wäre die Ausgabe:

gesehen 1
Ausnahmenachricht: / bis Null
Jeder Fehler wurde behandelt.
Geht weiter

Der schließlich wird der Block ausgeführt, unabhängig davon, ob ein Fehler aufgetreten ist oder nicht.

Abschluss

Eine Ausnahme wird mit der einfachen Anweisung im Try-Block ausgelöst, möglicherweise mit einer IF-Kompound-Anweisung und der Problemanweisung codiert. Eine Ausnahme kann weiterhin mit einer Methode in Bezug auf die Versuchserklärung ausgelöst werden. Dieser Artikel war die Grundlagen, eine Ausnahme in Java zu werfen.