Aprendí el mecanismo de excepción en los últimos dos días, del cual, en mi opinión, intentar... capturar... finalmente es una parte importante. En relación con las declaraciones que aprendí antes, encontré el interesante problema de regresar y finalmente. experimentos, descubrí que el lenguaje de computadora Esta relación lógica es realmente sutil. La siguiente es mi propia opinión. Si hay algún problema, espero que los mayores puedan señalarlo.
Primero mira el primer fragmento de código.
clase pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; System.out.println( "inicio" ); devolver i+=10; }catch(Excepción e){ System.out.println( "error: "+e }finalmente{ si(i>10){ System.out.println( i ); System.out.println( "finalmente" } return i;
El resultado del primer fragmento de código es el siguiente:
comenzar
20
finalmente
20
Tenga en cuenta que el segundo retorno está fuera de la declaración finalmente. De acuerdo con las regulaciones que aparecen al mismo tiempo, podemos entender que el primer retorno es solo una condición. Su función es solo encontrar la declaración finalmente. De hecho, solo ejecuta una operación i+= 10, luego ingresa directamente la declaración finalmente y finalmente devuelve el resultado.
Veamos el segundo fragmento de código:
clase pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; System.out.println( "inicio" ); devolver i+=10; }catch(Excepción e){ System.out.println( "error: "+e }finalmente{ si(i>10){ System.out.println( i ); System.out.println( "finalmente" );
La diferencia entre el segundo fragmento de código y el primero es que el retorno final se coloca en la declaración finalmente. Podemos adivinar el resultado de salida:
comenzar
20
finalmente
50
El retorno ejecutado en este momento sobrescribió los 20 obtenidos del resultado de la operación anterior y devolvió el valor 50. Es decir, el retorno en la declaración finalmente se ejecutó Bueno, debería decirse así ~~.
También hay un tercer código, disfrútelo lentamente:
clase pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; System.out.println( "inicio" ); devolver i; }catch(Excepción e){ System.out.println( "error: "+e }finalmente{ si(i>10){ System.out.println( i ); System.out.println( "finalmente" ); i=50 } return i;
En este momento, hay un i = 50 adicional en la declaración final, entonces, ¿cuál es el resultado?
comenzar
finalmente
10
Este es el resultado. No hay una declaración de retorno en la declaración finalmente, por lo que el valor de retorno original no cambiará.
Entonces, a través de estos tres ejemplos, podemos entenderlo de esta manera:
Cuando encuentre el retorno en la declaración try, primero almacene el valor en un lugar y luego busque la declaración finalmente. Si hay un nuevo algoritmo en la declaración, saque el valor de ese espacio y realice la operación. un retorno finalmente, simplemente coloque el "nuevo valor" "Sobrescriba el" valor anterior "en ese espacio y eventualmente regrese; si no hay retorno finalmente, simplemente saque el" valor anterior "en ese espacio y devuélvalo.
Lo anterior es puramente para entender, espero que puedas darme más consejos, ¡gracias por tu ayuda!