Non ce n'est pas la même chose : avec un
catch(Exception) tu attrapes toutes les exceptions possibles et imaginables, y compris les
RuntimeExceptions qui ne devraient généralement pas être traités...
De plus cela peut "cacher" d'autres exceptions : le compilateur ne t'avertira pas en cas où il y a d'autre exception "non traité" (que tu pourrais vouloir traiter différemment) puisque tu les traites toutes...
:arrow: On passe d'une gestion fine (en cas d'IOException ou de SQLException, je fais ceci) à un traitement global pour toutes les exceptions...
Concretement :
Code:
1 2 3
| catch (IOException | SQLException e) {
// traitement
} |
Est plutôt strictement équivalent à :
Code:
1 2 3 4 5
| catch (IOException e) {
// traitement
} catch (SQLException e) {
// traitement
} |
(sans le double traitement bien sûr)
Cela peut particulièrement être utile avec des APIs utilisant de multiples exceptions (comme c'est le cas pour la reflection), puisque cela te permet de regrouper les exceptions dans des groupes plus généraux (les erreurs de config, les erreurs de dev, les erreurs "rattrapables", ...).
a++