Java-Ausnahmen werden in zwei Typen unterteilt: geprüfte Ausnahmen und ungeprüfte Ausnahmen. Ein anderer Name ist Ausnahmen und Fehler.
Einfach ausgedrückt: Geprüfte können während der Ausführung wiederhergestellt werden, während ungeprüfte Ausnahmen Fehler sind, die nicht behandelt werden können.
geprüfte Ausnahme:
bedeutet ungültig und kann im Programm nicht vorhergesagt werden. Beispiel: Ungültige Benutzereingabe, Datei existiert nicht, Netzwerk- oder Datenbankverbindungsfehler. Dies sind alles externe Gründe und können nicht innerhalb des Programms gesteuert werden.
muss explizit im Code behandelt werden. Versuchen Sie beispielsweise, die Blockverarbeitung abzufangen, oder fügen Sie der Methode eine Throws-Beschreibung hinzu, um die Ausnahme in die obere Ebene des Aufrufstapels auszulösen.
Erbt von java.lang.Exception (außer java.lang.RuntimeException).
ungeprüfte Ausnahme:
zeigt einen Fehler an, einen logischen Fehler im Programm. Ist eine Unterklasse von RuntimeException, z. B. IllegalArgumentException, NullPointerException und IllegalStateException.
Es besteht keine Notwendigkeit, ungeprüfte Ausnahmen im Code zur Behandlung explizit abzufangen.
Erbt von java.lang.RuntimeException (und java.lang.RuntimeException erbt von java.lang.Exception).
Die geprüfte Ausnahme in Java muss explizit durch Try-Catch im Code abgefangen oder erneut ausgelöst werden. Wenn Sie diese Ausnahme nicht behandeln müssen, können Sie die Ausnahme einfach erneut auslösen Der Nachteil besteht darin, dass viele Leute es gewohnt sind, einen leeren Catch-Block direkt in den Code zu schreiben. Dies macht den Code nicht nur überflüssig und „hässlich“, sondern führt auch zu Problemen beim Debuggen und erhöht die Schwierigkeit der Codewartung. Einige Leute sagen daher, dass geprüfte Ausnahmen den Code ausführlicher machen und leere Catch-Blöcke bedeutungslos sind. Daher sollten geprüfte Ausnahmen aus dem Java-Standard entfernt werden. Beispielsweise gibt es in C# kein Konzept für geprüfte Ausnahmen und C# erzwingt kein explizites Abfangen Ausnahmen.
Der Grund, warum Java-Ausnahmen in diese beiden Typen unterteilt werden, sollte in den folgenden Überlegungen liegen:
Überprüfte Ausnahmen können Entwicklern helfen, zu erkennen, welche Zeilen Ausnahmen verursachen können, da Javas API Es wurde erklärt welche Methoden aufgerufen werden dürfen, die eine Ausnahme auslösen können. Wenn es nicht verarbeitet wird, wird die Kompilierung bis zu einem gewissen Grad nicht bestanden. Mit diesem Ansatz können einige Fehler im Programm vermieden werden.
Zwei einfache Beispiele
geprüfte Ausnahme
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class Main { public static void main(String[] args) { File f = new File("C:\test.txt"); FileReader r = new FileReader(f); //A BufferedReader br = new BufferedReader(r); br.readLine(); //B br.close(); //C } }
Dieser Code kann nicht kompiliert werden, da A, Zeilen B und C löst eine IOException aus. Sie müssen diesen Code in einen Try-Catch-Block einfügen oder der Hauptmethode zum Kompilieren eine throws IOException hinzufügen.
2. Ungeprüfte Ausnahme
public class Main { public static void main(String[] args) { int a = 0; int b = 100; int c = b/a; } }
Kann kompiliert werden, aber bei der Ausführung wird ein Fehler gemeldet
Exception in thread “main” java.lang.ArithmeticException: / by zero at Main.main(Main.java:13)
ArithmeticException ist eine ungeprüfte Ausnahme.
Benutzerdefinierte Ausnahme
1. geprüfte Ausnahme
Benutzerdefinierte Ausnahmeklasse InvalidUrlException
public class InvalidUrlException extends Exception { public InvalidUrlException(String s){ super(s); } }
public class Main { public static void getRemoteData(String url) throws InvalidUrlException{ if(isValidUrl(url)){ //获取远程数据 } else throw new InvalidUrlException("Invalid URL: " + url); } public static boolean isValidUrl(String url){ .... //验证URL是否有效 } public static void main(String[] args) { getRemoteData(args[0]); } }
Wenn getRemoteData in der Hauptmethode aufgerufen wird, dort Es gibt zwei Methoden, eine ist Try-Catch und die andere besteht darin, throws InvalidUrlException direkt zu main hinzuzufügen.
2. Ungeprüfte Ausnahme
Wenn Sie „InvalidUrlException“ in „extends RuntimeException“ ändern
public class InvalidUrlException extends Exception { public InvalidUrlException(String s){ super(s); } }
, muss main keine Würfe oder Try-Catch hinzufügen.
Geprüfte oder ungeprüfte Ausnahme auswählen?
Einige Java-Bücher empfehlen die Verwendung geprüfter Ausnahmehandler für alle wiederherstellbaren Ausnahmen und ungeprüfter Ausnahmen für nicht behebbare Fehler. Tatsächlich können die meisten von RuntimeException geerbten Java-Ausnahmen jedoch auch im Programm wiederhergestellt werden. Beispielsweise können NullPointerException, IllegalArgumentExceptions, Divide-by-0-Ausnahmen usw. erfasst und verarbeitet werden, damit das Programm weiter ausgeführt werden kann. Nur einige besondere Umstände stören die Ausführung des Programms, z. B. das Lesen der Konfigurationsdatei beim Start. Wenn die Konfigurationsdatei nicht vorhanden ist oder ein schwerwiegender Fehler vorliegt, muss das Programm beendet werden.
Im Folgenden sind einige Argumente für und gegen geprüfte Ausnahmen aufgeführt:
Der Compiler zwingt dazu, ungeprüfte Ausnahmen abzufangen oder auszulösen, damit Entwickler immer daran denken, Ausnahmen zu behandeln.
Methoden, die geprüfte Ausnahmen auslösen, müssen Throws als Teil der Methode oder Schnittstelle deklarieren, was beim Hinzufügen oder Ändern von Methodenausnahmen zu Unannehmlichkeiten führt.
Ungeprüfte Ausnahmen müssen nicht explizit behandelt werden, erschweren jedoch die Ausnahmebehandlung.
Wenn Sie eine geprüfte Ausnahmemethode aufrufen, müssen Sie die Ausnahme dieser Methode behandeln, was den oberen Aufrufercode verwirrend macht.
Es liegt an Ihnen zu entscheiden, ob Sie aktiviert oder deaktiviert wählen. Es ist schwierig zu sagen, welches definitiv richtig ist und umgekehrt. Unter den derzeit populäreren Sprachen scheint Java die einzige zu sein, die geprüfte Ausnahmen unterstützt, während andere Sprachen nur ungeprüfte Ausnahmen haben.
Das Obige ist der Inhalt der geprüften und ungeprüften Ausnahmen von Java. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!