Cuando se lanza la excepción, la ejecución del método habitual hará un giro no lineal empinado. Depende de cómo esté codificado el método, las excepciones pueden incluso hacer que el método regrese prematuramente. Este es un problema en algunos métodos. Por ejemplo, si un método abre un elemento de archivo y lo cierra y luego sale, no desea que el código que cierra el archivo se evite mediante el mecanismo de manejo de excepciones. Finalmente, las palabras clave están diseñadas para manejar tales accidentes.
Finalmente crea un bloque de código. Este bloque de código se ejecuta antes de que aparezca otra prueba/captura después de completar un bloque de try/captación. Finalmente, el bloque se ejecutará independientemente de si hay una excepción lanzada o no. Si se lanza la excepción, finalmente se ejecutará incluso sin una cláusula de captura que coincida con la excepción. Se devolverá un método de un bloque de prueba/captura al programa de llamadas en cualquier momento, después de una excepción no captura o una declaración de devolución explícita, la cláusula finalmente aún se ejecutará antes de que el método regrese. Esto es útil al cerrar el mango del archivo y liberar cualquier otro recurso que se asigne al comienzo del método. La cláusula finalmente es opcional, ya sea con o sin. Sin embargo, cada declaración de prueba requiere al menos una captura o finalmente una cláusula.
El siguiente ejemplo muestra 3 métodos de salida diferentes. Cada uno ejecuta la cláusula finalmente:
// Demuestre finalmente. System.out.println ("ProCa finalmente"); . "PROCC Finalmente"); ();
En este ejemplo, ProCa () interrumpe el intento prematuramente lanzando una excepción. La cláusula final se ejecuta en salida. La declaración PROCB () Prueba sale a través de una declaración de devolución. La cláusula finalmente se ejecuta antes de que la procb () regrese. En PROCC (), la declaración de prueba se ejecuta normalmente sin errores. Sin embargo, finalmente BLOCK aún se ejecutará.
Nota: Si el bloque Finalmente se usa junto con un intento, el bloque finalmente se ejecutará antes del final de la prueba.
La siguiente es la salida generada por el programa anterior:
Dentro de FinentyException de Procaproca, Catttinside de Procbprocb, finalmente ProccCrocc de Procccc finalmente