Ob Sinn macht, Exceptions mit try-catch zu fangen, nur um eine Fehlermeldung zu printen, die genau das anzeigt (eigentlich sogar viel weniger), was die Exception anzeigt, sei mal dahin gestellt. Wenn Du die Exceptions direkt weiter wirfts, wirst Du nämlich Deine methode1 mit entsprechender throws-Klausel deklarieren müssen. Dadurch ist im Prinzip nichts gewonnen. Deswegen ergänzend dazu die Info, dass Exceptions gewrapped und weiter geworfen werden können. Vielfach werden checked Exceptions (wie bspw. FileNotFound) in unchecked Exceptions (wie bspw. RuntimeExeption) gewrapped und weitergeworfen. Das geht so:
Das sollte IMHO aber nicht eine RuntimeException sein, sondern ggf. eine, die von RuntimeException erbt. (Ich bastle u.v.a gerade an einer Reflection-Lib, wo alle möglichen (checked) Exceptions, die bei reflektiven Aufrufen entstehen können, in eine (unchecked) ReflectionException gewrappt werden…)
Die RuntimeException habe ich nur für den Beispielcode genommen, um das Prinzip zu verdeutlichen. Tatsächlich nimmt man natürlich eher spezifischere Exceptions. Ich verwende beispielsweise sehr häufig IllegalArgumentException und IllegalStateException. Eigene Exception-Klassen setze ich nur sehr sparsam bis überhaupt nicht ein. Ich sehe zwar den Vorteil, mit dem Typen spezifisch arbeiten zu können, aber das brauche ich nur äußerst selten. Das mag anders sein, wenn man eine Lib baut.
Volle Zustimmung, IllegalArgumentException reicht für die meisten Fälle aus. Da aber bei einem einzigen, unscheinbaren Reflection-Aufruf durchaus mal 6-8 Checked Exceptions zusammenkommen können, hielt ich es da für angebracht, dem ganzen mal eine gemeinsame, unchecked Exception zu spendieren (Genaugenommen habe ich die meisten Methoden jetzt in 2 Arten erstellt: *Unchecked und *Optional: Die *Unchecked-Methoden wie getMethodUnchecked werfen eben ggf. eine ReflectionException, und die *Optionals returnen einfach null - ja, ich weiß, das macht man eigentlich nicht, aber Reflection ist eben eine Welt für sich…)
Wenn man nur die RuntimeException verwendet, kann man sie nicht im Programm verarbeiten (jedenfalls nicht, ohne den Inhalt der Exception zu analysieren, was zu „instabilem“ Code führen kann). Sei es nur, um in einem GUI eine spezifische Fehlermeldung auszugeben.