Fehler sind das Problem von Anwendern und Programmierern. Entwickler wollen offensichtlich nicht, dass ihre Programme auf Schritt und Tritt umkippen, und Benutzer sind Fehler in Programmen mittlerweile so gewöhnt, dass sie widerwillig akzeptieren, den Preis für Software zu zahlen, die mit ziemlicher Sicherheit mindestens einen Fehler enthält. Java soll dem Programmierer eine sportliche Chance geben, eine fehlerfreie Anwendung zu entwickeln. Es gibt Ausnahmen, von denen der Programmierer weiß, dass sie eine Möglichkeit darstellen, wenn eine Anwendung mit einer Ressource oder einem Benutzer interagiert, und diese Ausnahmen können behandelt werden. Leider gibt es Ausnahmen, die der Programmierer nicht kontrollieren oder einfach übersehen kann. Kurz gesagt, alle Ausnahmen sind nicht gleich und daher gibt es mehrere Typen, über die ein Programmierer nachdenken muss.
Eine Ausnahme ist ein Ereignis, das dazu führt, dass das Programm nicht in der beabsichtigten Ausführung ausgeführt werden kann. Es gibt drei Arten von Ausnahmen: die geprüfte Ausnahme, die Fehler- und die Laufzeitausnahme.
Überprüfte Ausnahmen sind Ausnahmen, die eine Java-Anwendung bewältigen sollte. Wenn eine Anwendung beispielsweise Daten aus einer Datei liest, sollte sie in der Lage sein, die zu verarbeiten FileNotFoundException
. Schließlich gibt es keine Garantie dafür, dass die erwartete Datei dort ist, wo sie sein soll. Auf dem Dateisystem könnte alles passieren, von dem eine Anwendung keine Ahnung hätte.
Um dieses Beispiel noch einen Schritt weiter zu führen. Angenommen, wir verwenden die FileReader
Klasse zum Lesen einer Zeichendatei. Wenn Sie sich die FileReader-Konstruktordefinition in der Java-API ansehen, sehen Sie die Methodensignatur:
public FileReader (String fileName) löst FileNotFoundException aus
Wie Sie sehen können, gibt der Konstruktor ausdrücklich an, dass das FileReader
Konstruktor kann ein werfen FileNotFoundException
. Dies ist sinnvoll, da es sehr wahrscheinlich ist, dass die Dateiname
Die Zeichenfolge ist von Zeit zu Zeit falsch. Schauen Sie sich den folgenden Code an:
public static void main (String [] args) FileReader fileInput = null; // Öffne die Eingabedatei fileInput = new FileReader ("Untitled.txt");
Syntaktisch sind die Anweisungen korrekt, aber dieser Code wird niemals kompiliert. Der Compiler kennt das FileReader
Konstruktor kann ein werfen FileNotFoundException
und es liegt am aufrufenden Code, um diese Ausnahme zu behandeln. Es gibt zwei Möglichkeiten: Erstens können wir die Ausnahme von unserer Methode durch Angabe von a weitergeben wirft
Klausel auch:
public static void main (String [] args) löst FileNotFoundException FileReader fileInput = null aus; // Öffne die Eingabedatei fileInput = new FileReader ("Untitled.txt");
Oder wir können tatsächlich mit der Ausnahme umgehen:
public static void main (String [] args) FileReader fileInput = null; try // öffne die Eingabedatei fileInput = new FileReader ("Untitled.txt"); catch (FileNotFoundException ex) // den Benutzer anweisen, die Datei zu suchen
Gut geschriebene Java-Anwendungen sollten in der Lage sein, geprüfte Ausnahmen zu bewältigen.
Die zweite Art von Ausnahme ist als Fehler bekannt. Wenn eine Ausnahme auftritt, erstellt die JVM ein Ausnahmeobjekt. Diese Objekte stammen alle aus dem Wurfbar
Klasse. Das Wurfbar
Klasse hat zwei Hauptunterklassen- Error
und Ausnahme
. Das Error
Klasse bezeichnet eine Ausnahme, mit der eine Anwendung wahrscheinlich nicht umgehen kann.
Diese Ausnahmen gelten als selten. Zum Beispiel könnten der JVM die Ressourcen ausgehen, weil die Hardware nicht alle Prozesse bewältigen kann, mit denen sie zu kämpfen hat. Es ist möglich, dass die Anwendung den Fehler abfängt, um den Benutzer zu benachrichtigen. In der Regel muss die Anwendung jedoch geschlossen werden, bis das zugrunde liegende Problem behoben ist.
Eine Laufzeitausnahme tritt einfach deshalb auf, weil der Programmierer einen Fehler gemacht hat. Sie haben den Code geschrieben, alles sieht für den Compiler gut aus, und wenn Sie den Code ausführen, stürzt er ab, weil er versucht hat, auf ein Element eines Arrays zuzugreifen, das nicht vorhanden ist, oder weil ein logischer Fehler dazu geführt hat, dass eine Methode aufgerufen wurde mit einem Nullwert. Oder eine beliebige Anzahl von Fehlern, die ein Programmierer machen kann. Aber das ist okay, wir erkennen diese Ausnahmen durch ausführliche Tests, richtig?