A titolo puramente didattico aggiungerei che in molti scenari sarebbe opportuno il tipo esatto di eccezione e gestirlo caso per caso. Ti sarai accorto sbirciando nelle API che metodi e costruttori possono talvolta lanciare eccezioni di natura diversa (2, 3 o più per metodo/costruttore), che chiaramente si verificano in condizioni anomale diverse. Per esempio una connessione a database potrebbe fallire perché non si riesce a stabilire la connessione con il database, oppure perché il driver non è corretto o perché non si riesce a seleziona il database una volta connessi al database-server ecc. ecc... ed in ognuna di queste diverse situazioni potresti voler lanciare messaggi diversi o intraprendere azioni diverse.