J'ai découvert le mécanisme d'exception au cours des deux derniers jours, dont try...catch...finally est à mon avis une partie importante. Par rapport aux déclarations que j'ai apprises auparavant, j'ai rencontré le problème intéressant du retour et enfin. Après des expériences, j'ai découvert que le langage informatique Cette relation logique est en effet subtile. Ce qui suit est ma propre opinion. S'il y a quelque chose qui ne va pas, j'espère que vous, les seniors, pourrez le signaler :
Regardez d’abord le premier morceau de code
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() ); } public static int m_1(){ int i=10; try{ System.out.println( "start" ); return i+=10; }catch(Exception e){ System.out.println( "erreur : "+e }finalement{ if(i>10){ System.out.println( i ); } System.out.println( "enfin" } return i;
Le résultat du premier morceau de code est le suivant :
commencer
20
enfin
20
Notez que le deuxième retour est actuellement en dehors de l'instruction final. Selon les réglementations qui renvoient et apparaissent finalement en même temps, nous pouvons comprendre que le premier retour n'est qu'une condition. Sa fonction est uniquement de trouver l'instruction finale. En fait, il exécute uniquement une opération i+= 10, puis saisit directement l'instructionfinal et renvoie enfin le résultat.
Regardons le deuxième morceau de code :
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() ); } public static int m_1(){ int i=10; try{ System.out.println( "start" ); return i+=10; }catch(Exception e){ System.out.println( "erreur : "+e }finalement{ if(i>10){ System.out.println( i ); } System.out.println( "enfin" ); return 50;
La différence entre le deuxième morceau de code et le premier est que le retour final est placé dans l'instruction final. Nous pouvons deviner le résultat de la sortie :
commencer
20
enfin
50
Le retour exécuté à ce moment a écrasé le 20 obtenu à partir du résultat de l'opération précédente et a renvoyé la valeur 50, ce qui signifie que le retour dans l'instruction final a été exécuté. Eh bien, cela devrait être dit comme ça~~.
Il y a aussi un troisième morceau de code, profitez-en lentement :
public class return_finally{ public static void main(String[] args){ System.out.println( m_1() ); } public static int m_1(){ int i=10; try{ System.out.println( "start" ); return i; }catch(Exception e){ System.out.println( "erreur : "+e }finalement{ if(i>10){ System.out.println( i ); } System.out.println( "enfin" );
À l’heure actuelle, il y a un i=50 supplémentaire dans l’instructionfinal, alors quel est le résultat ?
commencer
enfin
10
Voici le résultat. Il n'y a pas d'instruction return dans l'instructionfinal, donc la valeur de retour d'origine ne changera pas.
Alors à travers ces trois exemples, peut-on le comprendre ainsi :
Lorsque vous rencontrez le retour dans l'instruction try, stockez d'abord la valeur à un endroit, puis recherchez l'instruction enfin. S'il y a un nouvel algorithme dans l'instruction, retirez la valeur de cet espace et effectuez le calcul s'il y en a. un retour enfin, mettez simplement la "nouvelle valeur" "Écrasez "l'ancienne valeur" dans cet espace et retournez éventuellement ; s'il n'y a pas de retour finalement, retirez simplement "l'ancienne valeur" dans cet espace et renvoyez-la.
Ce qui précède est purement pour comprendre, j'espère que vous pourrez me donner plus de conseils, merci pour votre aide !