Comme le montre la figure, tout d'abord, vous devez comprendre que lorsqu'il n'y a pas de dans finally1, return : exécutera d'abord le contenu à l'intérieur de try, et le retour sera exécuté mais il n'y a pas de véritable retour. À ce moment, go L'instruction infinal est exécutée, puis revient pour exécuter return, comme dans la question ci-dessus x1:1, puis renvoie x++ à ce moment-là ; 1, mais final sera exécuté de toute façon, donc il ne revient pas immédiatement, mais l'instruction in final est exécutée en premier, puis x3:3 est obtenue. Cependant, le point clé de est : parce qu'il y a. pas de retour finalement, le changement en x dans finalement n'affectera pas la valeur du retour précédent, car le retour précédent Ce qui sort est 1 donc même si la valeur de x est finalement modifiée plus tard, puis le retour est à nouveau exécuté, le précédent 1 sera toujours restitué. C'est-à-dire que le retour est le même numéro lorsqu'il s'éteint. Il ne changera pas à moins qu'il ne soit finalement renvoyé 2 Lorsqu'il y a retour dans . enfin : Le try sera exécuté en premier, le retour sera exécuté mais il n'y a pas de réel retour à ce moment, le final sera exécuté, puis le retour dans final sera exécuté et reviendra directement.
Flux de code Déclarer les variablesx = 1 Attrapé l'exception et exécuté return x++ à ce moment x = 2, mais la valeur de x++ était 1, mais l'action de return n'a pas été exécuté exécute finalement, x = 3, puis return revient en arrière.
Lancez d'abord une exception, puis renvoyez la valeur x (1), puis x dans la classe augmentera de 1. Je ne sais pas si c'est vrai ou non, je suis aussi un débutant.
1. Partout où il y a un retour dans try catch finalement, la valeur actuelle est d'abord enregistrée dans la pile, mais elle ne revient pas immédiatement. Les instructions suivantes seront toujours exécutées et les instructions dans final seront toujours exécutées. Cependant, la valeur de retour a été placée sur la pile à l'avance, donc la valeur de retour est toujours 1. Si vous placez les instructions de retour dans try catch enfin, vous pouvez voir différents résultats d'exécution dans l'ordre.
http://m.blog.csdn.net/articl...
Comme le montre la figure, tout d'abord, vous devez comprendre que lorsqu'il n'y a pas de
dans
finally
1,return
:exécutera d'abord le contenu à l'intérieur de
try
, et le retour sera exécuté mais il n'y a pas de véritable retour. À ce moment, go L'instruction infinal est exécutée, puis revient pour exécuter return, comme dans la question ci-dessusx1:1
, puis renvoie x++ à ce moment-là ; 1, mais final sera exécuté de toute façon, donc il ne revient pas immédiatement, mais l'instruction in final est exécutée en premier, puisx3:3
est obtenue. Cependant, le point clé de est : parce qu'il y a. pas de retour finalement, le changement en x dans finalement n'affectera pas la valeur du retour précédent, car le retour précédent Ce qui sort est 1 donc même si la valeur de x est finalement modifiée plus tard, puis le retour est à nouveau exécuté, le précédent 1 sera toujours restitué. C'est-à-dire que le retour est le même numéro lorsqu'il s'éteint. Il ne changera pas à moins qu'il ne soit finalement renvoyé2 Lorsqu'il y a retour dans . enfin :
Le try sera exécuté en premier, le retour sera exécuté mais il n'y a pas de réel retour à ce moment, le final sera exécuté, puis le retour dans final sera exécuté et reviendra directement.
J'espère qu'il sera adopté.
Flux de code
Déclarer les variables
x = 1
Attrapé l'exception et exécuté
return x++
à ce momentx = 2
, mais la valeur dex++
était1
, mais l'action dereturn
n'a pas été exécutéexécute finalement,
x = 3
, puisreturn
revient en arrière.Lancez d'abord une exception, puis renvoyez la valeur x (1), puis x dans la classe augmentera de 1. Je ne sais pas si c'est vrai ou non, je suis aussi un débutant.
opérateur return x++, renvoie d'abord le côté gauche, puis x augmente de 1. return ++x devrait renvoyer 2
La signification de l'expression ++X est : X plus un, et la valeur de l'expression est X plus un
La signification de l'expression X++ est : X plus un, mais la valeur de l'expression est toujours X.
1. Partout où il y a un retour dans try catch finalement, la valeur actuelle est d'abord enregistrée dans la pile, mais elle ne revient pas immédiatement. Les instructions suivantes seront toujours exécutées et les instructions dans final seront toujours exécutées. Cependant, la valeur de retour a été placée sur la pile à l'avance, donc la valeur de retour est toujours 1. Si vous placez les instructions de retour dans try catch enfin, vous pouvez voir différents résultats d'exécution dans l'ordre.