Java Versuchen Sie, die Nutzung <br /> zu fangen, obwohl der vom Java -Laufzeitsystem bereitgestellte Standard -Ausnahmebehandler zum Debuggen nützlich ist, möchten Sie normalerweise selbst Ausnahmen abwickeln. Dies gibt zwei Vorteile. Erstens können Sie Fehler beheben. Zweitens verhindert es, dass das Programm automatisch endet. Die meisten Benutzer sind (gelinde gesagt) über das Drucken von Stapelspuren verärgert, wenn das Programm endet und wenn ein Fehler auftritt. Glücklicherweise ist dies leicht zu vermeiden.
Um einen Laufzeitfehler zu verhindern und zu bewältigen, müssen Sie nur den Code, den Sie überwachen möchten, in einen Try -Block einfügen. Befolgen Sie den Try -Block, einschließlich einer Fangklausel, die den Fehlertyp angibt, den Sie fangen möchten. Es ist sehr einfach, diese Aufgabe zu erledigen.
Klasse exc2 {public void main (String args []) {int d, a; gedruckt. ");} catch (ArithmeSexception e) {// catch Divide-by-nero Fehlersystem.out.println (" Division by Zero. "); ;}} Das Programm gibt wie folgt aus:
Division von Zero. Nach der Erklärung der Aufnahme.
Beachten Sie, dass der Anruf bei Println () im Try -Block niemals ausgeführt wird. Sobald die Ausnahme erhöht ist, wird die Programmsteuerung vom Try -Block auf den Fangblock übertragen. Die Ausführung "kehrt" nie vom Fangblock zum Try -Block zurück. "Das wird nicht gedruckt."
Wird nicht angezeigt. Sobald die Catch -Anweisung ausgeführt wurde, setzt sich die Programmsteuerung aus der folgenden Zeile des gesamten Versuchs-/Fangmechanismus fort.
Ein Versuch und seine Catch -Anweisung bilden eine Einheit. Der Umfang der Fangklausel ist auf die vor der Versuchserklärung definierte Erklärung beschränkt. Eine Catch -Erklärung kann die Ausnahme, die von einer anderen Versuchserklärung ausgeführt wurde, nicht aufnehmen (es sei denn, es handelt sich um einen verschachtelten Versuchserklärung).
Durch Versuch geschützte Aussagen müssen sich in einer Klammer befinden (dh sie müssen sich in einem Block befinden). Sie können versuchen, den Versuch alleine zu verwenden.
Der Zweck der Erstellung einer Fangklausel besteht darin, Ausnahmen zu lösen und weiter zu laufen, als ob der Fehler nicht aufgetreten wäre. Beispielsweise wird im folgenden Programm jeweils für die Schleife wiederholt, um zwei zufällige Ganzzahlen zu erhalten. Diese beiden Ganzzahlen werden jeweils durch die andere Partei geteilt, und das Ergebnis wird verwendet, um 12345 zu teilen. Das Endergebnis existiert in a. Wenn ein Abteilungsbetrieb zu einem Null -Divisionsfehler führt, wird er erfasst, der Wert von A wird auf Null gesetzt und das Programm wird weiterhin ausgeführt.
// eine Ausnahme behandeln und weitermachen. ) für (int i = 0; i <32000; i ++) {try {b = r.Nextint (); {System.out.println ("Division by Zero.");Zeigen Sie eine Ausnahmebeschreibung
Throwable überlastet die Methode toString () (definiert durch Objekt), sodass eine Zeichenfolge, die die Ausnahmeb Beschreibung enthält, zurückgegeben wird. Sie können die Beschreibung der Ausnahme anzeigen, indem Sie einen Parameter an die Ausnahme in println () übergeben. Zum Beispiel kann der Fangblock des vorherigen Programms als umgeschrieben werden wie
catch (Arithmexception e) {System.out.println ("Ausnahme:" + e); Wenn diese Version die Version im ursprünglichen Programm ersetzt, wird das Programm unter dem Standard -Javajdk -Interpreter ausgeführt. Jeder Fehler wird durch Null geteilt. Zeigt die folgende Nachricht an:
Ausnahme: java.lang.arithmeMexception: / nach Null
Obwohl es im Kontext keine speziellen Werte gibt, ist die Fähigkeit, eine Ausnahmebeschreibung anzuzeigen, in anderen Fällen wertvoll - insbesondere wenn Sie eine Ausnahme experimentieren und debuggen.
Verwendung von Java Multiple Catch Anweisung <BR /> In einigen Fällen können mehrere Ausnahmen durch ein einzelnes Code -Segment verursacht werden. Um mit dieser Situation umzugehen, können Sie zwei oder mehr Fangklauseln definieren, von denen jede eine Ausnahme eines Typs fängt. Wenn eine Ausnahme erhöht wird, wird jede Fangklausel nacheinander überprüft und die erste Klausel, die mit dem Ausnahmetyp übereinstimmt, wird ausgeführt. Wenn eine Catch -Anweisung ausgeführt wird, werden andere Klauseln umgangen, und die Ausführung wird nach dem Try/Catch -Block aus dem Code fortgesetzt. Das folgende Beispiel entwirft zwei verschiedene Ausnahmetypen:
// Multiple Catchements.Class Multicatch {public static void main (String args []) {try {int a = args.Length; int c [] = {1}; out .println ("Array Index OOB:" + e);Das Programm wird in der Startbedingung ohne Befehlszeilenparameter ausgeführt, was zu einer Null-Divid-Ausnahme führt, da a 0 ist. Wenn Sie einen Befehlszeilenparameter angeben, überlebt er und setzt A auf einen Wert, den größer als Null ist. Es wird jedoch die Ausnahme von ArrayIndexoutOf Boundsexception verursachen, da das Ganzzahlarray C 1 Länge hat und das Programm versucht, C einen Wert zuzuweisen [42].
Hier ist die Ausgabe des Programms, das in zwei verschiedenen Situationen ausgeführt wird:
C:/> java multicatcha = 0Divide von 0: java.lang.arithmeTexception:/by Null nach Try/Catch Blocks
Wenn Sie eine Multi-Catch-Anweisung verwenden, ist es wichtig zu beachten, dass Ausnahmeunterklassen vor einem ihrer Elternklassen verwendet werden müssen. Dies liegt daran, dass die Verwendung der Catch -Anweisung der übergeordneten Klasse Ausnahmen für den Typ und alle Subklassentypen erfasst. Auf diese Weise wird die Unterklasse niemals eintreffen, wenn die Unterklasse hinter der übergeordneten Klasse steht. Darüber hinaus ist der Code, der in Java nicht erreicht werden kann, ein Fehler. Betrachten Sie beispielsweise das folgende Verfahren:
/* Dieses Programm enthält einen Fehler. Eine Unterklasse muss in einer Reihe von Fanganweisungen vor der Superklasse stehen. args []) {try {int a = 0; RithmeTexception ist eine Unterklasse von Ausnahme.Wenn Sie versuchen, das Programm zu kompilieren, erhalten Sie eine Fehlermeldung, dass die zweite Catch -Anweisung nicht ankommt, da die Ausnahme gefangen wurde. Da die Arithmexception eine Unterklasse ausnahmslos ist, wird die erste Catch-Anweisung alle außerorientierten Fehler, einschließlich der Arithmeticexception, behandelt. Dies bedeutet, dass die zweite Erklärung niemals ausgeführt wird. Um das Programm zu ändern, kehren Sie die Reihenfolge der beiden Fanganweisungen um.