ZICKENALAAAAAAAAARM ;-)
Prinzipiell sollte auch jede mögliche Exception abgefangen werden und zwar nach der Reihenfolge des Auftretens. Die Basis, also Exception selbst, sollte als letztes folgen und nicht als einzige catch-Methode fungieren. Damit kann Ressourcen gespart werden und Fehlermeldungen können genauer geliefert werden, wie Christian schon per Sourcecode gezeigt hat.
Zum Finally-Block:
Innerhalb eines try-catch wird Code ausgeführt, der unter anderem eine Exception werden könnte. In manchen Fällen macht es Sinn einen finally-Block anzuhängen. Dieser wird auf jeden Fall ausgeführt, auch wenn eine Exception geworfen wird. Dies hat eben den Sinn, dass Aufräumarbeiten durchgeführt werden können. Beispielsweise das Schließen von Datenbankverbindungen, das Freigeben von Systemressourcen und andere Dinge, die unbedingt erledigt werden sollten.
Natürlich kann es auch vorkommen, dass der Code innerhalb des Finally-Blocks eine Exception wirft (da dies beim Freigeben von Ressourcen mitunter passieren kann). Auf diese muss natürlich auch entsprechend reagiert werden.
Grundsätzlich gilt jedoch zu überlegen, wann es Sinn macht, dem User eine Fehlermeldung um die Ohren zu werfen. Oft kann das Problem durch zusätzlichen Code behoben werden (beispielsweise eine fehlende Einstellungs-Datei anlegen etc.).