Wie Ausnahmen in Java Catch

Jedes Mal, wenn Sie eine Anweisung, die eine Ausnahme in Java werfen könnte, sollten Sie speziellen Code zu antizipieren schreiben und die Ausnahme abfangen. Auf diese Weise wird Ihr Programm nicht abstürzen, wenn die Ausnahme auftritt.

Sie fangen eine Ausnahme durch eine mit Versuchen Aussage, die diese allgemeine Form hat:

Versuchen{Aussagen, die Ausnahmen auslösen können}Fang (Ausnahme-Typ-Kennung) {Anweisungen ausgeführt, wenn Ausnahme ausgelöst wird}

Hier legen Sie die Anweisungen, die eine Ausnahme innerhalb eines werfen könnte Versuchen Block. Dann fangen Sie die Ausnahme mit einem Fang Block.

Hier sind ein paar Dinge zu beachten, über Versuchen Aussagen:

  • Sie können mehr als ein Code Fang Block. Auf diese Weise, wenn die Aussagen in der Versuchen Block könnte mehr als eine Art von Ausnahme auslösen, können Sie jede Art von Ausnahme in einem separaten fangen Fang Block.

  • Für Scoping Zwecke, die Versuchen Block ist seine eigene in sich geschlossene Block, getrennt von der Fang Block. Als Ergebnis erklären alle Variablen, die Sie in der Versuchen Block sind nicht sichtbar für die Fang Block. Wenn Sie sie sein wollen, erklären sie unmittelbar vor dem Versuchen Erklärung.

  • Sie können auch einen speziellen Block-Code (eine so genannte endlich Block), Nachdem die gesamte Fang Blöcke. Weitere Informationen zum Codieren endlich Blöcke.

  • Die verschiedenen Ausnahmeklassen in der Java-API sind in verschiedenen Paketen definiert. Wenn Sie eine Ausnahmeklasse verwenden, die nicht im Standard definiert ist java.lang Paket, das immer verfügbar ist, müssen Sie ein zur Verfügung zu stellen Import Erklärung für das Paket, das die Ausnahme-Klasse definiert.

Ein einfaches Beispiel

Um darzustellen, wie eine Ausnahme zu schaffen, ist hier ein Programm, das zwei Zahlen teilt und verwendet ein Versuchen/Fang Anweisung eine Ausnahme zu fangen, wenn die zweite Zahl dreht Null sein aus:

public class DivideByZero {public static void main (String [] args) {int a = 5-int b = 0- // wissen Sie das nicht worktry wird {int c = a / b- // aber sie versuchen es trotzdem} catch (ArithmeticException e) {System.out.println ( "Oops, können Sie nicht" + "Division durch Null".) -}}}

Hier erfolgt die Aufteilung in ein Versuchen Block und ein Fang Block Griffe ArithmeticException. ArithmethicException ist definiert durch java.lang, so ein Import Erklärung dafür ist nicht erforderlich.

Wenn Sie dieses Programm ausführen, wird die folgende auf der Konsole angezeigt:

Hoppla, Sie können nicht durch Null teilen.

Es gibt nichts anderes hier zu sehen.

Ein anderes Beispiel

Hier ist ein einfaches Beispiel eines Programms, das ein Verfahren verwendet eine gültige Ganzzahl von dem Benutzer zu erhalten. Wenn der Benutzer gibt einen Wert, der nicht eine gültige ganze Zahl ist, die Fang Block fängt den Fehler und erzwingt die Schleife zu wiederholen.

Import java.util. * - Public class GetInteger {static Scanner sc = new Scanner (System.in) -public static void main (String [] args) {System.out.print ( "eine ganze Zahl eingeben:") -int i = GetAnInteger () - System.out.println ( "Sie eingegeben" + i) -} public static int GetAnInteger () {while (true) {try {return sc.nextInt () -} catch (InputMismatchException e) {sc. (weiter) - System.out.print ( "Das ist nicht" + "eine ganze Zahl Versuchen Sie es erneut.") -}}}}

Hier haben die Anweisung, die die Eingabe von dem Benutzer erhält und gibt sie an den Methoden aufgerufen wird innerhalb der codierten Versuchen Block. Wenn der Benutzer eine gültige ganze Zahl eingibt, ist diese Aussage die einzige in dieser Methode, die ausgeführt wird.

Wenn der Benutzer Daten eingibt, die nicht in eine ganze Zahl umgewandelt werden kann, jedoch die nextInt Verfahren wirft ein InputMismatchException. Dann wird diese Ausnahme durch die abgefangene Fang Block - das ist die durch den Aufruf des Benutzers falsche Eingabe verfügt Nächster Verfahren, sowie durch eine Fehlermeldung angezeigt wird. Dann ist die während Schleife wiederholt.

Hier ist, was die Konsole wie für eine typische Ausführung dieses Programms aussehen könnte:

Geben Sie eine ganze Zahl: dreiDas ist nicht eine ganze Zahl. Versuchen Sie es erneut: 3.001That ist nicht eine ganze Zahl ist. Versuchen Sie es erneut: 3Sie 3 eingegeben

Hier sind ein paar andere Dinge über dieses Programm zu beachten:

  • Das Import Anweisung gibt java.util. * zu importieren, alle Klassen von der java.util Paket. Auf diese Weise wird die InputMismatchException Klasse wird importiert.

  • Das Nächster Methode muss in der heißen Fang Block zur Verfügung über die ungültige Eingabe des Benutzers, da die nextInt Verfahren verlässt den Eingangswert in der Scanner'S Eingangsstrom, wenn ein InputMismatchException geworfen. Wenn Sie die Anweisung weglassen, dass Anrufe Nächster, das während Schleife hält, löst eine Ausnahme zu lesen, und zeigt eine Fehlermeldung in einer Endlosschleife.

    Dieser Fehler wurde auf die harte Tour gefunden. (Der einzige Weg, es zu stoppen zu machen, ist das Konsolenfenster zu schließen.)

    bild0.jpg

Menü