wake-up-neo.com

Hat jede Ausnahme einen erforderlichen Try-Catch?

Eine einfache Frage, und ich kann keine Antwort darauf finden ... Ist es für jede Ausnahme in Java erforderlich, einen Try-Catch zu verwenden? Oder ist es nur für die FileNotFoundException?

Viele Ausnahmen (IndexOutOfBoundException, ArithmeticException, IlligalArgumentException, NullPointerException) besagen, dass sie keine Exception benötigen, aber FileNotFoundException tut ...) und ich kann keine Antwort finden, die do-Versuch macht und was nicht versucht .

15
Youri

Es ist nicht zwingend erforderlich, einen try/catch-Block für Ihre Ausnahmen zu haben. Stattdessen können Sie sie an jemanden throw übergeben, der in der Lage ist, die Ausnahme richtig zu behandeln. 

Es gibt zwei Arten von Ausnahmen: Aktiviert und nicht geprüft. Eine geprüfte Ausnahme kann in Betracht gezogen werden eine, die vom Compiler gefunden wird, und der Compiler weiß, dass es eine Chance hat, aufzutreten. Daher müssen Sie catch oder throw verwenden. Zum Beispiel das Öffnen einer Datei. Es hat eine Chance zu scheitern, und der Compiler weiß das, also müssen Sie catch oder throw die mögliche IOException.

Eine ungeprüfte Ausnahme kann in Betracht gezogen werden eine, die eine Chance hat, aber aufgrund Ihres Codes weiß der Compiler nicht. Mit anderen Worten handelt es sich um einen -Programmierfehler. Wenn Sie beispielsweise Benutzereingaben verwenden und eine Zahl erwarten, und der Benutzer etwas eingibt, das Sie nicht erwartet haben, z. B. eine Zeichenfolge, würde Ihr Programm eine NumberFormatException werfen. Sie können diese Szenarien vorhersagen und mit try/catch versuchen, sie zu vermeiden, bevor sie auftreten. Sehr selten wird gesehen, dass eine Person einen throws NullPointerException oder throws NumberFormatException hinzufügt (oder eine andere ungeprüfte Ausnahme auslöst). Es ist erlaubt, aber die explizite Erstellung dieser Ausnahme ist seltsam und die meisten Leute würden sagen, es sei ein schlechter Codierstil.

Beachten Sie, dass alle geprüften Vorschläge müssen gefangen oder auf etwas geworfen werden, das damit umgehen kann. Wenn Sie es nicht tun, wird Ihr Programm nicht kompiliert. Wenn Sie es auf etwas werfen, das damit nicht umgehen kann, wird Ihr Programm wahrscheinlich abstürzen, wenn es auftritt.

Beachten Sie auch, dass eine ungeprüfte Ausnahme (z. B. eine, die zur Laufzeit auftritt, in der Regel durch fehlerhafte Benutzereingaben oder whatnot) das Programm normalerweise zum Absturz bringt. Daher ist es in der Regel eine gute Idee, try/catch zu verwenden, wenn möglicherweise etwas schief geht, aber Sie müssen nicht .

Interessant ist auch die Bemerkung, dass zwar Checked-Ausnahmen Unterklassen von Exception und Unchecked-Exceptions Unterklassen von RuntimeException sind, RuntimeException selbst jedoch eine Unterklasse von Exception ist. Das heißt, wenn Sie es wirklich wollten, fängt eine einzelne try {} catch (Exception e) {} jede einzelne Ausnahme ab, die Ihr Programm möglicherweise auslösen könnte. Zugegeben, dies ist eine schreckliche Art, mit Ausnahmen umzugehen, und Sie sollten jede einzeln fangen, damit Sie sie getrennt behandeln können. Bitte versuchen Sie es nicht zu benutzen.

41
Aify

Nein, nicht jede Ausnahme erfordert einen Try-Catch. Jede geprüfte Ausnahme erfordert einen Try-Catch. Eine NullPointerException ist zum Beispiel eine ungeprüfte Ausnahme. Daher ist kein Try-Catch erforderlich, wohingegen eine FileNotFoundException überprüft wird, also eine Ausnahme. Sie können der Methodensignatur auch "Würfe" hinzufügen, sodass kein Try-Catch erforderlich ist.

2
Josh Edwards

Lesen Sie: https://docs.Oracle.com/javase/tutorial/essential/exceptions/

Grundsätzlich geprüft Ausnahmen müssen behandelt oder geworfen werden. __ Ungeprüfte Ausnahmen und Fehler können behandelt oder ausgelöst werden (obwohl die Behandlung von Fehlern im Allgemeinen als schlechte Praxis betrachtet wird).

Die geprüfte Ausnahme ist alles, was von Java.lang.Exception geerbt wird

Eine ungeprüfte Ausnahme ist alles, was von Java.lang.RuntimeException geerbt wird

Fehler ist alles, was von Java.lang.Error erbt

1
cbeutenmueller

Nur die explizite Ausnahmebedingung für geprüfte Ausnahmen muss abgefangen werden. Für alle anderen Ausnahmen können Sie "Würfe" zur Methodensignatur verwenden.

0
user2248671

Ja, aber wenn Sie es nicht in Ihrer Methode behandeln möchten, können Sie die Ausnahme mit dem Schlüsselwort throws an den Aufrufer der Methode übergeben. Beispiel:

void execption() throws Exception {
    throw new Exception();
}

void caller() {
    try {
        execption();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Edit: Ich bin auf meinem Java ein bisschen verrostet. Wie gesagt, Sie könnten ungeprüfte Ausnahmen haben, für die kein Try/Catch wie NullPointerException erforderlich ist. Sie können jedoch eine hinzufügen, wenn Sie der Meinung sind, dass eine ungeprüfte Ausnahme ausgelöst wird. Beispiel:

Object obj = null;

obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here
0
J Atkin

Wenn eine von Ihnen aufgerufene Methode explizit eine Ausnahme auslöst, müssen Sie try....catch loop verwenden. Im Falle der Liste, die Sie angegeben haben, handelt es sich jedoch um Laufzeitausnahmen. Sie werden geworfen, wenn ein Programm manchmal Eingaben hat, die nicht erwartet wurden, oder wenn das Programm für bestimmte Zwecke verwendet wurde, für die es nicht vorgesehen war. Diese erfordern keine try....catch-Schleife.

0
Blip