Ils diffèrent si
- la
try
-bloc complète en jetant un java.lang.Throwable
qui n'est pas java.lang.Exception
, par exemple parce qu'il est un java.lang.Error
tel que AssertionError
ou OutOfMemoryError
.
- le bloc try se termine brusquement au moyen d'un tableau de flux de commande un tel
continue
, break
ou return
- le bloc catch se termine brusquement (en lançant une throwable, ou en utilisant un tableau de flux de commande)
Plus Généralement, le langage java garantit qu'un bloc finally est exécuté avant la fin de l'instruction try. (Notez que si l'instruction try ne se termine pas, il n'y a aucune garantie sur le résultat final.Une instruction peut ne pas être complète pour diverses raisons, y compris l'arrêt matériel, l'arrêt du système d'exploitation, l'arrêt de machine virtuelle (par exemple System.exit
) attente (Thread.suspend()
, synchronized
, Object.wait()
, Thread.sleep()
) ou d'être autrement occupé (boucles sans fin, ,,,). Alors
, un bloc finally
est un meilleur endroit pour des actions de nettoyage à la fin du corps de la méthode, mais en lui-même, ne peut toujours pas garantir l'exeuction de nettoyage
Correction: un bloc final _is_ est exécuté lorsqu'une erreur java.lang.Error est levée.Il peut ne pas être exécuté avec succès, mais il est exécuté. ditions qui peuvent contrarier l'exécution d'un bloc finally, voir ma réponse pour une liste incomplète. – meriton
Remarque: Si la JVM se ferme pendant l'exécution du code try ou catch, le bloc finally peut ne pas s'exécuter. De même, si le thread exécutant le code try ou catch est interrompu ou détruit, le bloc finally peut ne pas s'exécuter même si l'application dans son ensemble continue. - https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – Hansa