usar studio programacion para móviles libro edición desarrollo curso codigo aplicaciones java .net finally

java - studio - programacion android pdf 2018



¿Por qué usamos finalmente bloques? (9)

Por lo que puedo decir, los dos siguientes fragmentos de código tendrán el mismo propósito. ¿Por qué finally tienen bloques?

Código A:

try { /* Some code */ } catch { /* Exception handling code */ } finally { /* Cleanup code */ }

Código B:

try { /* Some code */ } catch { /* Exception handling code */ } // Cleanup code


Aunque nuestra aplicación está cerrada con fuerza, habrá algunas tareas que debemos ejecutar (como liberación de memoria, cierre de base de datos, bloqueo de liberación, etc.), si escribe estas líneas de código en el bloque finally se ejecutará si se lanza una excepción o no...

Su aplicación puede ser una colección de hilos, Exception termina el hilo pero no toda la aplicación, en este caso finally es más útil.

En algunos casos, finally no se ejecutará, como JVM Fail, Thread terminate, etc.


Es posible que desees ejecutar el código que desees de todos modos, independientemente de lo que ocurra en tu bloque try o catch.

Además, si está utilizando capturas múltiples y si desea poner algún código que sea común para todos los bloques de captura, este sería un lugar para poner, pero no puede estar seguro de que se haya ejecutado todo el código en prueba.

Por ejemplo:

conn c1 = new connection(); try { c1.dosomething(); } catch (ExceptionA exa) { handleexA(); //c1.close(); } catch (ExceptionB exb) { handleexB(); //c1.close(); } finally { c1.close(); }


Finalmente siempre se ejecuta, mientras que su código después de la captura no.


Porque necesita que el código se ejecute independientemente de las excepciones que se puedan lanzar. Por ejemplo, puede que necesite limpiar algún recurso no administrado (el compilador ''using'' se compila en un bloque try / finally).


Puede haber ocasiones en las que desee ejecutar una pieza de código pase lo que pase. Si se lanza una excepción o no. Entonces uno usa finally .


Si catch block arroja cualquier excepción, el código restante no se ejecutará, por lo tanto, tenemos que escribir el bloque finaly.


Tenga en cuenta que (al menos en Java, probablemente también en C #), también es posible tener un bloque try sin catch , pero con un finally . Cuando ocurre una excepción en el bloque try , el código en el bloque finally se ejecuta antes de que la excepción se lance más arriba:

InputStream in = new FileInputStream("somefile.xyz"); try { somethingThatMightThrowAnException(); } finally { // cleanup here in.close(); }


finally SIEMPRE se ejecuta, a menos que la JVM se haya cerrado, finally solo proporciona un método para colocar el código de limpieza en un solo lugar.

Sería demasiado tedioso si tuviera que poner el código de limpieza en cada uno de los bloques de catch .


  • ¿Qué sucede si se lanza una excepción que no está manejando? (Espero que no estés atrapando a Throwable ...)
  • ¿Qué sucede si regresas desde el interior del bloque de prueba?
  • ¿Qué sucede si el bloque catch lanza una excepción?

Un bloque finally se asegura de que, como salga de ese bloque (modulé algunas formas de abortar todo el proceso explícitamente), se ejecutará. Eso es importante para la limpieza determinista de los recursos.