funciona - ¿Cuál es el beneficio de usar "finalmente" después del bloqueo try-catch en java?
try catch finally python (6)
El bloque "finally" siempre se ejecuta cuando finaliza el try-catch, en caso de excepción o no. Pero también se ejecuta siempre cada línea de código fuera y después de la prueba de captura. Entonces, ¿por qué debería usar la declaración final?
Ejemplo:
try {
//code...
} catch (Exception e) {
//code...
} finally {
System.out.println("This line is always printed");
}
System.out.println("Also this line is always printed !! So why to use ''finally''?? ");
El bloque finally es una herramienta clave para evitar fugas de recursos. Cuando cierre un archivo o recupere recursos, coloque el código en un bloque finally para garantizar que el recurso siempre se recupere.
Pero finalmente es útil para algo más que el manejo de excepciones: permite que el programador evite que el código de limpieza sea anulado accidentalmente por un retorno, continuación o interrupción. Poner el código de limpieza en un bloque finally es siempre una buena práctica, incluso cuando no se prevén excepciones.
Más here
Pero también cada línea de código fuera y después de try-catch siempre se ejecuta
Esto es incorrecto. En caso de excepciones no revisadas (RuntimeException, Error y sus subclases), el código después de finally
no se ejecutará.
Echa un vistazo a este código
public static void main(String[] args) {
try{
someDengerousMethod();
} catch (Exception e) {
e.printStackTrace();
}finally{
System.out.println("finally block");
}
System.out.println("after finally...");
}
public static void someDengerousMethod(){
throw new Error("something went wrong");
}
El último System.out.println
(después del bloque finally) solo se ejecutará si la excepción lanzada en el bloque try se captura de forma efectiva con un bloque catch y si la ejecución no se interrumpe, por ejemplo, mediante una instrucción return.
En su ejemplo, el bloque finally siempre se ejecutará, pero la ejecución solo continuará más allá del bloque finally si no se Error
un Error
en el bloque try (no se detectará), si no se lanza Throwable
en el bloque catch y allí no hay otra declaración, que interrumpirá la ejecución.
El caso más útil es cuando necesita liberar algunos recursos:
InputStream is = ...
try {
//code...
} catch (Exception e) {
//code...
} finally {
is.close();
}
De manera más general, lo usa cuando quiere asegurarse de que su código se ejecute al final, incluso si hubo una excepción durante la ejecución:
long startTime = System.currentTimeMillis();
try {
//code...
} catch (Exception e) {
//code...
} finally {
long endTime = System.currentTimeMillis();
System.out.println("Operation took " + (endTime-startTime) + " ms");
}
La idea de que este bloque finally
siempre se esté ejecutando es que no es el caso para la primera línea que sigue al bloque completo
- si el bloque de
catch
deja pasar algunos throwables - si se vuelve a lanzar una excepción, que es muy frecuente
finalmente, el único propósito del bloque es cerrar los recursos que ha abierto en el bloque try. los recursos pueden ser algo así como las conexiones de bases de datos, escritura / lectura de archivos, etc.
Connection conn= null;
try {
conn= get the db conn;
//do some DML/DDL
}
catch(SQLException ex) {
}
finally {
conn.close();
}
supongamos que está escribiendo en el archivo y de repente crea una excepción, la forma en que cierra el archivo. Luego, finalmente, le ayuda a usted y también para la transacción de la base de datos. Finalmente bloquear ayuda mucho.