Java -Ausnahmen sind in zwei Kategorien unterteilt: Überprüfung der Ausnahme und Laufzeitausnahme. Überprüfte Ausnahmen sind Ausnahmen, die während der Zusammenstellungsphase verarbeitet werden können.
Der Unterschied und die Verbindung zwischen geprüften Ausnahme und Laufzeitausnahme
Gemeinsame Ausnahmeklassen
Listen Sie mehrere gängige Laufzeitausnahmen auf:
Listen Sie mehrere nicht-rechtzeitige Ausnahmen auf (überprüfte Ausnahmen):
Fehler
Der Fehler bezieht sich im Allgemeinen auf Probleme im Zusammenhang mit virtuellen Maschinen, wie z. B. Systemabstürzen, virtuellen Maschinenfehlern, dynamischen Verbindungsfehlern usw. Dieser Fehler kann nicht wiederhergestellt oder nicht erfasst werden, was zu Anwendungsunterbrechungen führt. Normalerweise können Anwendungen diese Fehler nicht behandeln, sodass das Programm nicht versuchen sollte, den Fehlerobjekt zu fangen. Bei der Definition einer Methode müssen kein Fehlerobjekt ausgeführt werden.
Verwendung überprüfter Ausnahmen
Wie bereits erwähnt, muss die Überprüfung explizit behandelt werden, andernfalls wird der Kompilierungsfehler gemeldet, z. B. das Deklarieren eines Dateieingabestreams:
FileInputStream fis = new FileInputStream ("test.md");Dieser Code wird mit einem Fehler kompiliert
Nicht behandelte Ausnahmetyp FilenotFoundException
Daher muss es explizit behandelt werden, und es gibt im Allgemeinen zwei Möglichkeiten, überprüfte Ausnahmen zu behandeln:
Wenn Sie wissen, wie man damit umgeht, ist es am besten, den Versuch zu verwenden ... Fang ... Blockverarbeitung:
// Überprüfte Ausnahme muss explizit behandelt werden {FileInputStream fis = new FileInputStream ("test.md");} catch (FilenotFoundException e) {e.printstacktrace (); System.out.println ("Datei existiert nicht!");};Wenn Sie nicht wissen, wie Sie damit umgehen sollen, werfen Sie es in die Methode und behandeln Sie sie mit dem vorherigen Anrufer:
public static void main (String [] args) löst FilenotFoundException aus {// Überprüfte Ausnahme muss explizit behandelt werden. Die Methode des JVM zur Behandlung von Ausnahmen besteht darin, die Trace -Stack -Informationen zu drucken und das Programm zu beenden, um FileInputStream FIS = new FileInputStream auszuführen ("test.md");} Verwenden Sie Wurf, um Ausnahmen selbst zu werfen
Manchmal werfen wir nach geschäftlichen Bedürfnissen Ausnahmen in das Programm selbst. Wenn der Inhalt der Lesung Datei beispielsweise leer ist, ist dies der Meinung, dass dies eine Ausnahme ist. Zu diesem Zeitpunkt können wir Wurf verwenden, um die Ausnahme aktiv zu werfen und sie zu fangen:
// Wurf verwenden, um eine Ausnahme aktiv zu treiben {FileInputStream fis = new FileInputStream ("test.md"); if (fis.read () == 0) {neue ioException ("leere Datei"); }} catch (ioException e) {e.printstacktrace ();}Wenn Throw eine Laufzeitausnahme ausführt, kann das Programm mit Versuch erwischt werden ... Fang ... oder ignorieren Sie es.
Ausnahmekettenverarbeitung
In Anwendungen auf realer Unternehmensebene werden wir häufig die zugrunde liegenden Ausnahmen den Anwendungen der oberen Ebene häufig nicht aus. Erstens ist es für Benutzer, SQL -Ausnahmen zu sehen, für sie nicht hilfreich, und zweitens ist es für böswillige Benutzer nicht sicher, die zugrunde liegenden Ausnahmen aufzudecken.
Wie blockiere ich die zugrunde liegende Ausnahme? Die übliche Praxis ist: Das Programm fängt zunächst die ursprüngliche Ausnahme ein und macht dann eine neue geschäftliche Ausnahme. Die neue Geschäftsausnahme enthält schnelle Informationen für den Benutzer. Diese Art des Umgangs wird eine Ausnahmeübersetzung. Das Folgende zeigt, wie ein Programm, das einen Benutzer erstellt, die zugrunde liegende Ausnahme blockiert:
// Demonstrieren Sie die Ausnahmekette und erstellen Sie den Benutzer public void createsUbscriber (int subid) löscht BusinessException {try {// Erstellen Sie die Logik des Benutzers erstellen ...} catch (Ausnahme E) {// Verfahren Sie die ursprüngliche Ausnahme und speichern Sie die ursprüngliche Ausnahme. }}Sie können sehen, dass das Programm die ursprüngliche Ausnahme verbirgt und nur die erforderlichen Informationen zur Ausnahme von Ausnahmen nach oben liefert, um sicherzustellen, dass die zugrunde liegende Ausnahme nicht auf die Präsentationsschicht ausgedehnt wird, was vollständig mit dem Kapselungsprinzip des Objekts übereinstimmt.
Diese Art des Fangs einer Ausnahme, das Einwerfen einer anderen Ausnahme und das Speichern der ursprünglichen Ausnahmeinformationen ist eine typische Kettenverarbeitung, die als Verantwortungskettenmuster im Entwurfsmuster bezeichnet wird.
Mehrere Vorschläge für die Verwendung von Ausnahmen
Wir verwenden Ausnahmen, um mehrere Ziele zu erreichen:
Um diese Ziele anzusprechen, sollten wir:
1.. Nicht überbeanspruchen oder darauf verlassen: Ausnahmen sind sehr bequem, aber verwenden
// Originalcode if (FileSize> 100) {sysotem.out.println ("Die Datei ist zu groß, bitte erneut hochladen"); Weiter;} // Ändern Sie die Ausnahme, wenn (Filesize> 100) {neue Ausnahme werfen ("Die Datei ist zu groß, bitte laden Sie noch einmal hoch");} // Dies ist offensichtlich unverantwortlich.