Oui, enfin blocs court toujours... sauf quand:
- Le thread exécutant le try-catch-finally bloc est tué ou interrompu
- Vous utilisez le Système.exit(0);
- Le sous-jacentes de la VM est détruit lors d'une autre façon
- Le matériel sous-jacent est inutilisable en quelque sorte
En outre, si une méthode dans votre bloc finally lève une exception non interceptée, puis plus rien après, qui sera exécuté (c'est à dire l'exception sera levée, comme il le ferait dans n'importe quel autre code). Un cas très commun où cela se produit est - java.sql.Connection.close()
.
En aparté, je suppose que l'exemple de code que vous avez utilisé n'est qu'un exemple, mais être prudent de mettre de la logique réelle à l'intérieur d'un bloc finally. Le bloc finally est prévu pour les ressources de nettoyage (fermeture DB connections, libérant les descripteurs de fichiers, etc), pas de must-exécuter la logique. Si il doit exécuter de le faire avant le bloc try-catch, loin de quelque chose qui pourrait jeter une exception, que votre intention est presque certainement fonctionnellement le même.