Razones y escenarios para usar intento y finalmente no usar capturar
En el conjunto de herramientas de concurrencia JDK, muchos manipulación de excepciones utiliza la siguiente estructura, como AbstractExecutorService, es decir, solo hay intento y finalmente no atrapar.
Clase X {bloqueo final de reentrantlock final = new ReentrantLock (); desbloquear ()}}}¿Por qué usar esta estructura? ¿Cuáles son los beneficios? Mira primero el siguiente código
public void testtryandfinally (name de cadena) {try {name.length (); // nullpointerexception} finalmente {system.out.println ("aa");El resultado de la ejecución de pasar el método es: imprimir AA en la consola y arrojar una NullPointerException. El proceso de ejecución es ejecutar primero el bloque de try, ejecutar el bloque finalmente después de que ocurra una excepción y finalmente lanzar una excepción en el intento a la persona que llama. Este resultado de la ejecución es muy normal, porque no hay un controlador de excepción, todos los métodos solo pueden lanzar la excepción generada hacia afuera;
¿Cuáles son los beneficios de este enfoque? Para Testtryand Finalmente, hace lo que debe hacer y arroja excepciones que no puede manejar; En otras palabras, esta estructura se da cuenta de la separación de responsabilidades, se da cuenta del desacoplamiento del manejo de excepciones y la limpieza de excepciones, y permite que diferentes métodos se concentren en lo que deben hacer. Entonces, ¿cuándo usar TRY Finalmente y cuándo usar Try-Catch-Finally? Obviamente, depende de si el método en sí puede manejar excepciones que aparecen en la prueba. Si puede manejarlo usted mismo, atraparlo directamente sin lanzarlo a la persona que llama al método; . Es decir, declare una excepción que los lanzamientos pueden aparecer en la firma del método y no se pueden manejar por sí mismo, pero haga lo que debe hacer dentro del método.
La situación en la que no se ejecutará la declaración finalmente
La única situación en la que la declaración finalmente de Java no se ejecutará es que el método System.Exit () utilizado para rescindir el programa se ejecuta primero.
Public Class Test {public static void main (string [] args) {try {system.out.println ("inicio"); } System.out.println ("fin");El resultado de la salida es:
Comenzar
Por supuesto, si la potencia se corta repentinamente al ejecutar una declaración de prueba general sin la declaración System.Exit (), todos los procesos terminarán y la declaración finalmente no se ejecutará.