Ausnahmen sollten genau das sein .. Ausnahmen. Die beste Vorgehensweise bei der Verwendung von Ausnahmen besteht darin, sie zu verwenden, um die Situation abzudecken, in der etwas passiert, das nicht dem entspricht, was Sie erwarten würden. Das klassische Beispiel ist die FileNotFoundException, die ausgelöst wird, wenn eine Datei einfach nicht vorhanden ist. Wenn Sie die Existenz der Datei testen, verwenden Sie File.exists (), da Sie einfach mit einem 10-Fuß-Stick stoßen, um zu sehen, ob Sie etwas treffen.
Sie könnten technisch die gleichen Ergebnisse erzielen, indem Sie sie in einem Try-Catch umgeben und die Datei so verwenden, als ob sie vorhanden wäre. A) Ausnahmen sind jedoch im Allgemeinen ressourcenintensiv und B) Programmierer gehen davon aus, dass Sie gemeint haben, dass die Datei vorhanden ist, wenn sie vorhanden ist in einem Try-Catch, der zur allgemeinen Verwirrung eines Programms beiträgt.
Es gibt viele Situationen, in denen ich eine Methode schreibe, die einen Wert aus einer Datenbank abruft. Tausend Dinge könnten schief gehen, und da ich nur eine kleine Information benötige, ist es unpraktisch, den Anruf mit einer Try-Catch-Liste zu umgeben, die 5 verschiedene Ausnahmen enthält. Also werde ich Ausnahmen in der Abrufmethode abfangen. Wenn etwas schief geht, ergreife ich die entsprechenden Maßnahmen, um die Datenbankverbindung oder so weiter in der finally-Klausel zu schließen und null zurückzugeben. Dies ist eine gute Vorgehensweise, nicht nur, weil es Ihren Code vereinfacht, sondern auch, weil "null" dieselbe Nachricht sendet, die Sie von einer Ausnahme hätten erhalten können. Dass etwas nicht wie geplant gelaufen ist. Verwalten Sie Ausnahmespezifikationen in der Abrufmethode, aber verwalten Sie, was zu tun ist, wenn die Dinge nicht funktionieren.
Beispielsweise:
Integer getUserCount() {
Integer result = null;
try {
// Attempt to open database and retrieve data
} catch (TimeoutException e) {
logger.error("Got a watch?");
} catch (MissingDatabaseException e) {
logger.error("What are you smoking?");
} catch (PermissionsToReadException e) {
logger.error("Did you *really* think you were getting away with that?");
} catch (PressedSendButtonToHardException e) {
logger.error("Seriously.. just back away from the computer... slowly..");
} catch (WTFException e) {
logger.error("You're on your own with this one.. I don't even know what happened..");
} finally {
// Close connections and whatnot
}
return result;
}
void doStuff() {
Integer result = getUserCount();
if(result != null) {
// Went as planned..
}
}