Final: Desactivar interruptores polimórficos ~
Modificar variables: las variables no se pueden cambiar
Modificar clase: las clases no se pueden heredar
Método de modificación: el método no se puede reescribir
Finalmente: el último bloque de declaración utilizado en el procesamiento de excepciones
Si se genera una excepción o no, debe ejecutarse ~~~
Código Java
Public Final Class Finalmente Test {public static void main (string [] args) {try {throw new nullPointerException (); } Catch (NullPointerException e) {System.out.println ("El programa lanza una excepción"); } Finalmente {System.out.println ("El bloque de la declaración finalmente se ejecutó"); }}}Uso de palabras clave finalmente en Java
En comparación con otros modelos de idiomas, la palabra clave finalmente es la mejor adición al modelo de manejo de excepciones Java. La estructura finalmente permite que el código siempre se ejecute independientemente de si se produce la excepción. Use finalmente para mantener el estado interno de un objeto y para limpiar los recursos no memoria. Sin finalmente, su código será confuso. Por ejemplo, el siguiente código ilustra cómo tiene que escribir código para liberar recursos no memoria sin usar finalmente:
import java.net.*; import java.io.*; clase sinfinalmente {public void foo () lanza ioexception {// crea un socket en cualquier puerto libre Serversocket ss = new Serversocket (0); intente {socket socket = ss.accept (); // otro código aquí ...} Catch (IOException e) {ss.close (); // 1 tirar e; } // ... ss.close (); // 2}}Este código crea un socket y llama al método de aceptación. Antes de salir del método, debe cerrar este enchufe para evitar vulnerabilidades de recursos. Para lograr esta tarea, llamamos a Close AT // 2, que es la última declaración del método. Pero, ¿qué sucede si se produce una excepción en el bloque de try? En este caso, la llamada cercana a // 2 nunca sucede. Por lo tanto, debe ver esta excepción e insertar otra llamada para cerrar AT // 1 antes de volver a emitir esta excepción. Esto asegura que el socket esté cerrado antes de salir del método.
Escribir código como este es a la vez engorrosa y propensa a errores, pero es esencial sin finalmente. Desafortunadamente, en los idiomas sin un mecanismo finalmente, los programadores pueden olvidarse de organizar su código de esta manera, lo que resulta en vulnerabilidades de recursos. La cláusula finalmente en Java resuelve este problema. Con finalmente, el código anterior se puede reescribir en el siguiente formulario:
import java.net.*; import java.io.*; class withfinally {public void foo2 () lanza ioexception {// Crear un socket en cualquier puerto libre Serversocket ss = new ServerSocket (0); intente {socket socket = ss.accept (); // otro código aquí ...} Finalmente {ss.close (); }}}El bloque Finalmente asegura que el método de cierre siempre se ejecute independientemente de si se emite una excepción dentro del bloque Try. Por lo tanto, se asegura que el método de cierre siempre se llame antes de salir del método. De esta manera, puede estar seguro de que el socket está cerrado y que no ha filtrado recursos. No hay necesidad de otro bloque de captura en este método. El bloque de captura se proporciona en el primer ejemplo solo para cerrar el enchufe, ahora esto está cerrado finalmente. Si proporciona un bloque de captura, el código en el bloque finalmente se ejecuta después de que se termina el bloque de captura.
El bloque Finalmente se debe usar con el bloque de try o try/captación. Además, no es posible salir del bloque de try sin ejecutar su bloque finalmente. Si el bloque Finalmente existe, siempre se ejecutará. (Esta declaración es correcta desde ese punto de vista. Hay una manera de salir del bloque de try sin ejecutar el bloque finalmente. Si el código ejecuta un sistema.exit (0); Declaración dentro de la prueba, la aplicación termina sin ejecutar la ejecución finalmente. Por otro lado, si enciende durante la ejecución del bloque de try, finalmente no se ejecutará.