112 votes

Différence entre try-finally et try-catch

Quelle est la différence entre

try {
    fooBar();
} finally {
    barFoo();
}

et

try {
  fooBar();
} catch(Throwable throwable) {
    barFoo(throwable); // Does something with throwable, logs it, or handles it.
}

J'aime mieux la deuxième version car elle me donne accès au Throwable. Existe-t-il une différence logique ou une convention préférée entre les deux variantes ?

En outre, y a-t-il un moyen d'accéder à l'exception de la clause finale ?

15voto

Michiel Buddingh Points 3437

Ce ne sont pas des variations, ce sont des choses fondamentalement différentes. finally est toujours exécuté, catch seulement lorsqu'une exception se produit.

9voto

Kieran Points 4268

try est utilisé pour exécuter une méthode qui peut lancer une exception

catch est utilisé pour "attraper" arrêter cette exception

finally est utilisé pour tout nettoyage nécessaire à partir de cette exception étant pris ou non

try{
    myObject.riskyMethod(); // run a method that may throw an exception
}
catch(Exception ex){
    myLogger.log(ex.Message); // "catch" stop that exception
}
finally{
    myObject = null; // clean up needed from that exception being caught
}

3voto

Android Tutorial Points 369

Enfin, les blocs de capture sont très différents :

Dans le bloc de capture, vous pouvez répondre à l'exception lancée. Ce bloc n'est exécuté que s'il existe une exception non gérée et que le type correspond à celui ou est une sous-classe de celui spécifié dans le paramètre du bloc catch. Enfin sera toujours exécuté après essayer et attraper les blocs, qu'il y ait une exception soulevée ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X