1. Qu’il y ait une exception ou une exception, le code du dernier bloc sera exécuté ; 2. Lorsqu’il y a un retour dans la tentative d’attraper, finalement sera quand même exécuté ; 3. Finalement est exécuté après l’opération d’expression après retour (à ce moment-là, la valeur après l’opération n’est pas retournée, mais la valeur à retourner est sauvegardée en premier, quel que soit le code dans finalement, la valeur retournée ne changera pas, même si c’est la valeur précédemment enregistrée), donc la valeur de retour de fonction est déterminée avant l’exécution finale ; 4. Il est préférable de ne pas inclure return dans final, sinon le programme se terminera plus tôt, et la valeur return n’est pas celle enregistrée dans try ou catch. Exemple:
Situation 1:try{} catch(){}finally{} return ;
Apparemment, la procédure est réalisée dans l’ordre.
Situation 2:try{ return ; }catch(){} finally{} return ;
Le programme exécute le code avant return dans le bloc try (y compris l’opération d’expression dans l’instruction return) ;
puis exécuter le dernier bloc, et enfin exécuter le retour dans try ;
enfin block return, car le programme est revenu dans try, donc il n’est plus exécuté.
Situation 3:try{ } catch(){return ; } finalement{} return ;
Le programme exécute try en premier, et s’il rencontre une exception, il exécute le bloc de catch,
S’il y a une exception, exécutez le code avant return (y compris l’opération d’expression dans l’instruction return) dans la capture, puis exécutez tout le code de l’instruction finale.
Enfin, exécutez le retour dans le bloc de réception. Après enfin, le code à 4 endroits ne sera plus exécuté.
Pas d’exception : exécuter, essayer, puis finalement revenir.
Situation 4:try{ return ; }catch(){} finally{return ; }
Le programme exécute le code avant return dans le bloc try (y compris l’opération d’expression dans l’instruction return) ;
Ensuite, exécutez le dernier bloc, car il y a un retour dans le dernier bloc, donc quittez tôt.
Affaire 5:try{} catch(){return ; }enfin{retour ; }
Le programme exécute le code avant return (y compris les opérations d’expression dans l’instruction return) dans le bloc catch ;
Ensuite, exécutez le dernier bloc, car il y a un retour dans le dernier bloc, donc quittez tôt.
Situation 6:try{ return ; }catch(){return ; } finalement{retour ; }
Le programme exécute le code avant return dans le bloc try (y compris l’opération d’expression dans l’instruction return) ;
Il existe une exception : exécuter le code avant return (y compris l’opération d’expression dans l’instruction return) dans le bloc catch ;
Ensuite, exécutez le bloc final, car il y a un retour dans le bloc final, donc il sort plus tôt.
Pas d’exception : puis exécuter à nouveau le dernier bloc, et sortir tôt car il y a un retour dans le dernier bloc.
Conclusion finale: Toute instruction return dans try ou catch est exécutée avant la déclaration finale, si elle existe finalement.
S’il y a un recours de retour dans finalement, alors le programme reviendra, donc le retour dans finalement sera certainement retourné.
Le compilateur implémente le retour en enfin comme avertissement.
|