Voici l'officiel paroles de la Java Langage de Spécification.
JLS 14.20.2 Exécution de try-catch-finally
Un try
déclaration avec un finally
bloc est exécuté par la première exécution de l' try
bloc. Puis il y a le choix:
- Si l'exécution de l'
try
bloc se termine normalement, [...]
- Si l'exécution de l'
try
bloc se termine brusquement en raison d'un throw
de la valeur V, [...]
-
Si l'exécution de l'
try
bloc se termine brusquement pour toute autre raison R, alors l' finally
bloc est exécuté. Puis il y a le choix:
- Si le bloc finally se termine normalement, puis l'
try
instruction se termine brusquement de raison R.
- Si l'
finally
bloc se termine brusquement pour des raisons de S, puis l' try
instruction se termine brusquement pour des raisons de S (et la raison R est ignoré).
Le cahier des charges pour return
fait réellement cette explicites:
JLS 14.17 L'Instruction de retour
ReturnStatement:
return Expression(opt) ;
Un return
sans Expression
des tentatives de transférer le contrôle à l'appelant de la méthode ou d'un constructeur qui le contient.
Un return
déclaration avec une Expression
des tentatives de transférer le contrôle à l'appelant de la méthode qu'il contient; la valeur de l' Expression
devient la valeur de l'invocation de la méthode.
Les précédentes descriptions de dire "les tentatives de transfert de contrôle" plutôt que simplement "les transferts de contrôle", car s'il y a des try
instructions à l'intérieur de la méthode ou d'un constructeur dont l' try
blocs contiennent l' return
déclaration, puis tout finally
clauses de ceux - try
instructions seront exécutées dans l'ordre, plus intime ultrapériphériques, avant que le contrôle est transféré à l'invocateur de la méthode ou d'un constructeur. Brusque de l'achèvement d'un finally
clause peut perturber le transfert de contrôle initiée par un return
déclaration.