java return try-catch try-catch-finally finally

java - Trata de atrapar, finalmente con retorno después de que



return try-catch (5)

Definitivamente, el código dentro de try se ejecutará ... pero cuando alcanza la instrucción return ... se moverá al bloque finally sin ejecutar la instrucción return en el bloque try .. y luego se ejecutará el código de finally y luego la declaración return de el intento lo ejecutará.

Sé cómo probar, capturar y finalmente trabajar (en su mayor parte), pero tengo una cosa que me preguntaba: ¿qué sucede con una declaración de retorno después de un intento-captura-finalmente, mientras que ya tuvimos un retorno en el intento (o captura) )?

Por ejemplo:

public boolean someMethod(){ boolean finished = false; try{ // do something return true; } catch(someException e){ // do something } finally{ // do something } return finished; }

Digamos que nada salió mal en el intento, por lo que volvimos verdad. Luego iremos al final donde haremos algo como cerrar una conexión, ¿y luego?

¿Se detendrá el método después de que hicimos algunas cosas en el final (por lo que el método se volvió verdadero en el intento), o continuará el método después de que finalmente vuelva a terminar, lo que es falso?

Gracias de antemano por las respuestas.


El hecho de que se ejecute finalmente el bloque no hace que el programa olvide que usted regresó. Si todo va bien, el código después del bloque finally no se ejecutará.

Aquí hay un ejemplo que lo aclara:

public class Main { public static void main(String[] args) { System.out.println("Normal: " + testNormal()); System.out.println("Exception: " + testException()); } public static int testNormal() { try { // no exception return 0; } catch (Exception e) { System.out.println("[normal] Exception caught"); } finally { System.out.println("[normal] Finally"); } System.out.println("[normal] Rest of code"); return -1; } public static int testException() { try { throw new Exception(); } catch (Exception e) { System.out.println("[except] Exception caught"); } finally { System.out.println("[except] Finally"); } System.out.println("[except] Rest of code"); return -1; } }

Salida:

[normal] Finally Normal: 0 [except] Exception caught [except] Finally [except] Rest of code Exception: -1



Si todo va bien, el retorno dentro del try se ejecuta después de ejecutar el bloque finally .

Si algo sale mal dentro del try , la exception se captura y ejecuta y, finally , se ejecuta el bloqueo y luego se ejecuta la devolución posterior.


public int Demo1() { try{ System.out.println("TRY"); throw new Exception(); }catch(Exception e){ System.out.println("CATCH"); }finally{ System.out.println("FINALLY"); }return 0; }

La salida de llamada a este método es así.

TRY CATCH FINALLY 0

Significa considerar Try{}catch{}finally{} como secuencia de instrucciones ejecutadas una por una en este caso particular. Y que el control va para volver.