Die Beispiele in diesem Artikel beschreiben die Verwendung der Java-Ausnahmebehandlung. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Der Ausnahmebehandlungsmechanismus von Java kann uns helfen, Fehler zu vermeiden oder zu behandeln, die im Programm auftreten können, sodass das Programm nicht unerwartet beendet wird, wenn einige behebbare Fehler auftreten, sondern um diese Fehler zu behandeln, was uns auch beim Schreiben von Programmen verbessert Sie müssen viel Code schreiben, um Fehlerbedingungen zu überprüfen, was die Lesbarkeit und Logik des Codes verbessert. In Java stellt eine Ausnahme ein falsches Entitätsobjekt dar.
Ausnahmen können in zwei Kategorien unterteilt werden; eine davon sind schwerwiegende Fehler wie Hardwarefehler, unzureichender Speicher usw., die der Error-Klasse und ihren Unterklassen im Paket java.lang entsprechen. Normalerweise kann diese Art von Fehlerprogramm selbst nicht wiederhergestellt werden und muss die Ausführung des Programms unterbrechen. Bei der anderen Art handelt es sich um nicht schwerwiegende Fehler, z. B. wenn der Benutzer unzulässige Daten eingibt, durch 0 dividiert usw. Sie entsprechen der Ausnahmeklasse und Aufgrund seiner Ausnahmen im Paket java.lang kann diese Art von Fehler im Allgemeinen behoben werden, ohne den Betrieb des Programms zu beeinträchtigen.
Wir können die Schlüsselwörter „try“, „catch“ und „finally“ verwenden, um Ausnahmen abzufangen.
1. versuchen, fangen
Fügen Sie die Anweisungen, die Ausnahmen verursachen können, in den try{}-Block ein und fangen Sie sie dann im Anweisungsblock Catch{} ab. Ausnahme bei Division durch 0:
public class SimpleDemo { //Division operation public static int devision(int a,int b) { return a / b } public static void main(String[] args) { try { //5 dividiert durch 0 SimpleDemo.devision(5 ,0); System.out.println("Exception"); } Catch (Exception e) { e.printStackTrace( } System.out.println("Finish");Ausführungsergebnis:
Wie Sie sehen können, wird „Finish“ ausgegeben, was darauf hinweist, dass das Programm aufgrund eines Fehlers bei der Division durch 0 nicht beendet wurde.
Gleichzeitig haben wir auch festgestellt, dass die System.out.println-Anweisung unter SimpleDemo.devision(), bei der die Ausnahme auftrat, nicht ausgeführt wurde. Sobald eine Ausnahme auftritt, springt das Programm von der aktuellen Ausführungsposition ab, ohne die auf die Ausnahme folgenden Anweisungen auszuführen.
2. endlich
Die Anweisungen im „finally“-Block werden unabhängig davon ausgeführt, ob eine Ausnahme auftritt.
Jemand könnte fragen: Welche praktischen Auswirkungen hat dies schließlich, da die Anweisungen im „finally“-Block unabhängig davon ausgeführt werden, ob eine Ausnahme auftritt? Kann ich es nicht direkt draußen ohne „final“ schreiben?
Wie im obigen Beispiel fügen wir dem Catch-Anweisungsblock einen Return hinzu:
public class SimpleDemo { //Division operation public static int division(int a,int b) { return a / b } public static void main(String[] args) { try { //5 dividiert durch 0 SimpleDemo.division(5 ,0); System.out.println("Exception"); } Catch (Exception e) { //main function returns} return; System.out.println("Endlich"); } System.out.println("Fertig stellen");Zu diesem Zeitpunkt wird das Finish außerhalb des „finally“-Blocks nicht gedruckt, wohl aber das „final“ innerhalb des „finally“-Blocks.
ist schließlich in der tatsächlichen Entwicklung sehr nützlich. Wenn wir beispielsweise eine Datenbank öffnen und beim Lesen und Schreiben von Daten in der Datenbank eine Ausnahme auftritt, sollten wir die Datenbankverbindung schließen und die entsprechenden Ressourcen freigeben. Zu diesem Zeitpunkt ist es am besten, den Code zu schreiben, um Ressourcen im Final-Block freizugeben.
Es ist jedoch zu beachten, dass der „finally“-Block in einem Fall nicht ausgeführt wird. Wenn das Programm beendet wird, bevor der „finally“-Block ausgeführt wird, beispielsweise durch Aufrufen der System.exit()-Methode, hat der „finally“-Block keine Chance zur Ausführung.
3. Lösen Sie eine Ausnahme aus
Wenn in einer Methode eine Ausnahme auftritt, wir die Ausnahme jedoch nicht direkt in der Methode behandeln möchten, sondern möchten, dass der Aufrufer der Methode sie behandelt, können wir diese Methode mit dem Schlüsselwort throws zum Auslösen der Ausnahme deklarieren. Dies kommt in den von Sun bereitgestellten API-Funktionen sehr häufig vor. Beispielsweise ist die Lesemethode in java.io.Reader so deklariert, dass sie eine IOException auslöst:
public int read(char[] cbuf) löst eine IOException aus
Wenn wir zu diesem Zeitpunkt die Lesemethode aufrufen, müssen wir sie in den Try-Anweisungsblock einfügen, um Ausnahmen abzufangen. Andernfalls meldet der Compiler einen Fehler und zwingt uns, Ausnahmen abzufangen.
Wenn wir beim Aufrufen von read wirklich keine Ausnahmen behandeln möchten, können wir die Methode, die die read-Methode aufruft, natürlich auch als IOException-Auslösung deklarieren, sodass die Ausnahme erneut ausgelöst wird. Wenn wir in der Hauptfunktion eine Ausnahme deklarieren, werden die Ausnahmeinformationen schließlich von der JVM erfasst und verarbeitet. Das Verarbeitungsergebnis der JVM besteht darin, die Ausnahmeinformationen auszudrucken und dann das Programm zu beenden.
4. Struktur der Ausnahmebehandlung
Alle Ausnahmeklassen werden von der Exception-Klasse abgeleitet. Das heißt, wenn wir nicht sicher sind, welche Art von Ausnahme auftritt, können wir direkt ein Exception-Objekt in Catch deklarieren, um alle Ausnahmen der Exception-Klasse und ihrer Unterklassen abzufangen. Achten Sie jedoch auf die Reihenfolge, in der „catch“ geschrieben wird. Wenn es nach einem Versuch mehrere Catches gibt und der erste Catch ein Ausnahmeobjekt deklariert, wird die Ausnahme direkt vom ersten Catch behandelt und nachfolgende Catches können diese Ausnahme nicht abfangen. Diese Art von Fehler führt beim Kompilieren zu einem Fehler. Zum Beispiel:
public class CatchDemo { //Division operation public static int division(int a,int b) { return a / b } public static void main(String[] args) { try { CatchDemo.division(4,0); (Ausnahme e) { System.out.println("Exception Class"); } Catch(ArithmeticException e) { System.out.println("ArithmeticException Class"); } } }Der Compiler gibt aus, dass ArithmeticException abgefangen wurde. Dies bedeutet, dass die obige Ausnahme diese Ausnahme abgefangen hat und es nicht erforderlich ist, sie erneut abzufangen.
Was würde passieren, wenn diese beiden Fänge umgekehrt würden?
public class CatchDemo { //Division operation public static int division(int a,int b) { return a / b } public static void main(String[] args) { try { CatchDemo.division(4,0); (ArithmeticException e) { System.out.println("ArithmeticException Class"); } Catch(Exception e) { System.out.println("Exception Class"); } } }Zu diesem Zeitpunkt stellten wir fest, dass der Code die Kompilierung bestanden hatte und das Ausführungsergebnis darin bestand, dass ArithmeticException diese Ausnahme abfing, der nachfolgende Abfang sie jedoch nicht abfing.
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.