Ce sont deux choses différentes:
- Le bloc catch n'est exécuté que si une exception est levée dans le bloc try.
- Le bloc finally est exécuté toujours après le bloc try (-catch), si une exception est levée ou non.
Dans votre exemple, vous n'avez pas montré la troisième construction possible:
try {
// try to execute this statements...
}
catch( SpecificException e ) {
// if a specific exception was thrown, handle it here
}
// ... more catches for specific exceptions can come here
catch( Exception e ) {
// if a more general exception was thrown, handle it here
}
finally {
// here you can clean things up afterwards
}
Et, comme le dit @codeca dans son commentaire, il n'y a aucun moyen d'accéder à l'exception à l'intérieur du bloc finally, car le bloc finally est exécuté même s'il n'y a pas d'exception.
Bien sûr, vous pouvez déclarer une variable qui contient l'exception en dehors de votre bloc et attribuer une valeur à l'intérieur du bloc catch. Ensuite, vous pouvez accéder à cette variable dans votre bloc finally.
Throwable throwable = null;
try {
// do some stuff
}
catch( Throwable e ) {
throwable = e;
}
finally {
if( throwable != null ) {
// handle it
}
}
Throwable
dufinally
bloc, car il pourrait ne pas être unThrowable
.Ce ne sont pas des variations, ce sont des choses fondamentalement différentes.
finally
est toujours exécuté ,catch
uniquement lorsqu'une exception se produit.la source
Enfin et les blocs catch sont assez différents:
Alors
diffère de
significativement.
Si vous définissez un bloc try, vous devez définir
Donc, le code suivant serait également valide:
la source
try
est utilisé pour exécuter une méthode qui peut lever une exceptioncatch
est utilisé pour "attraper" arrêter cette exceptionfinally
est utilisé pour tout nettoyage nécessaire à partir de cette exception interceptée ou nonla source
Peu importe ce que le bloc Enfin est toujours exécuté, donc en général, le bloc Enfin est utilisé, lorsque vous avez des sessions, des connexions de base de données ou des fichiers ou des sockets sont ouverts, le code de fermeture de ces connexions sera placé. C'est juste pour s'assurer que dans une application aucune fuite de mémoire ou aucun autre problème ne devrait se produire.
la source
Enfin et les blocs catch sont assez différents:
Dans le bloc catch, vous pouvez répondre à l'exception levée. Ce bloc est exécuté uniquement 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 les blocs try and catch, qu'il y ait une exception levée ou non.
la source
Dans Mes recherches, le bloc Enfin est toujours exécuté et il est principalement "utilisé pour fermer les connexions ouvertes" et pour détruire quelque chose qui tourne inutilement.
la source
Généralement, lorsque nous utilisons des ressources telles que des flux, des connexions, etc., nous devons les fermer explicitement en utilisant le bloc finally. Dans le programme donné ci-dessous, nous lisons les données d'un fichier en utilisant FileReader et nous le fermons en utilisant le bloc finally.
Peut-être que d'autres types comme moi ont cherché quelque chose comme ça.
Informations de cette page tutpoint
la source
Enfin, le bloc est toujours exécuté. Catch block est exécuté uniquement lorsqu'une exception correspondant au paramètre blocks est interceptée.
la source
Même dans le premier formulaire, vous pouvez l'enregistrer dans la méthode d'appel. Il n'y a donc pas de gros avantage à moins que vous ne souhaitiez effectuer une manipulation spéciale sur place.
la source
Try block contiendra les instructions qui vont déclencher une exception. Le bloc catch contiendra la référence lancée depuis le bloc try et les messages requis sont générés à partir du bloc catch. Enfin, le bloc est également utilisé pour fermer les ressources utilisées telles que la fermeture de io, la fermeture de fichier, la fermeture de dB. est obligatoire
la source