Ist es sinnvoll, eine Methode zu erklären, eine Ausnahme und eine Unterklasse dieser Ausnahme zu werfen, z.B. IOException und FileNotFoundException?
Normalerweise nicht - die meisten IDEs, die ich kenne, geben sogar Warnungen für solche Deklarationen aus. Was Sie tun können und sollten, ist, die verschiedenen in Javadoc geworfenen Ausnahmen zu dokumentieren.
Ist es jedoch möglich, beide Ausnahmen zu behandeln, wenn die Methode nur die allgemeinste ie IOException auslöst?
Ja ist es, Sie müssen nur sicherstellen, dass die Catch-Blöcke in der richtigen Reihenfolge sind, d. H. Spezifischer zuerst.Catch-Blöcke werden in der Reihenfolge, wie sie definiert sind, ausgewertet, so dass hier
try {
...
} catch (FileNotFoundException e) {
...
} catch (IOException e) {
...
}
, wenn die ausgelöste Ausnahme ein FileNotFoundException
ist, wird es durch den ersten catch
Block abgefangen werden, sonst wird es in den zweiten fallen und behandelt wie ein allgemein IOException
. Die entgegengesetzte Reihenfolge würde nicht funktionieren, da catch (IOException e)
alle IOException
s einschließlich FileNotFoundException
fangen würde. (. In der Tat, in einem Übersetzungsfehler IIRC letztere führen würde)
Du hast Recht es nicht sauber ist - aber es ist nicht notwendig, auch nicht. Siehe meine Antwort und Karthiks. Im Grunde braucht man diese Hässlichkeit nicht. –
@Jon, wenn wir die Methode deklarieren, um IOException zu werfen, wie würde Anrufer wissen, dass es auch FileNotFoundException auslösen kann? –
Es ist nicht "auch" - eine FileNotFoundException * ist * eine IOException, so dass Sie immer versuchen können, sie abzufangen, wenn die Methode deklariert, dass sie IOException auslöst. Es wäre Sache der Dokumentation zu spezifizieren, unter welchen Umständen dies geschieht. –