Aprendi o mecanismo de exceção nos últimos dois dias, do qual try...catch...finalmente é uma parte importante em minha opinião Em relação às afirmações que aprendi antes, encontrei o interessante problema de retorno e finalmente depois. experimentos, descobri que a linguagem do computador Essa relação lógica é realmente sutil. O seguinte é minha opinião. Se houver algo errado, espero que vocês, idosos, possam apontar:
Primeiro, olhe para o primeiro pedaço de código
classe pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Exceção e){ System.out.println( "erro: "+e ); System.out.println(i } System.out.println( "finalmente" } retornar i;
A saída do primeiro trecho de código é a seguinte:
começar
20
finalmente
20
Observe que o segundo retorno está fora da declaração final neste momento. De acordo com os regulamentos que retornam e finalmente aparecem ao mesmo tempo, podemos entender que o primeiro retorno é apenas uma condição. Na verdade, ele apenas executa uma operação i+= 10, depois insere diretamente a instrução finalmente e finalmente retorna o resultado.
Vejamos o segundo trecho de código:
classe pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i+=10; }catch(Exceção e){ System.out.println( "erro: "+e ); System.out.println(i } System.out.println( "finalmente" );
A diferença entre a segunda parte do código e a primeira é que o retorno final é colocado na instrução finalmente. Podemos adivinhar o resultado da saída:
começar
20
finalmente
50
O retorno executado neste momento substituiu os 20 obtidos do resultado da operação anterior e retornou o valor 50. Ou seja, o retorno na instrução finalmente foi executado. Bem, deveria ser dito assim ~~.
Há também um terceiro trecho de código, aproveite-o devagar:
classe pública return_finally{ public static void main(String[] args){ System.out.println( m_1() } public static int m_1(){ int i=10; ); return i; }catch(Exceção e){ System.out.println( "erro: "+e ); System.out.println(i ); System.out.println( "finalmente" } retornar i }}
Neste momento, há um i=50 extra na declaração final, então qual é o resultado?
começar
finalmente
10
Este é o resultado. Não há instrução de retorno na instrução final, portanto o valor de retorno original não será alterado.
Então, através desses três exemplos, podemos entender desta forma:
Ao encontrar o retorno na instrução try, primeiro armazene o valor em um local e, em seguida, procure a instrução finalmente. Se houver um novo algoritmo na instrução, retire o valor desse espaço e execute a operação, se houver. um retorno em finalmente, basta colocar o "valor novo" "Sobrescrever o "valor antigo" nesse espaço e eventualmente retornar; se não houver retorno em finalmente, basta retirar o "valor antigo" nesse espaço e devolvê-lo.
O texto acima é apenas para compreensão, espero que você possa me dar mais conselhos, obrigado pela sua ajuda!