2011-06-30 25 views
9

En readFileMethod1, un IOException queda explícitamente atrapado antes de arrojarlo en el nivel de método para garantizar que se ejecuta el bloque finally. Sin embargo, ¿es necesario atrapar la excepción? Si elimino el bloque catch, que se muestra en readFileMethod2, ¿se ejecuta también el bloque finally?Java finalmente bloquea y arroja excepción en el nivel de método

private void readFileMethod1() throws IOException { 
    try { 
     // do some IO stuff 
    } catch (IOException ex) { 
     throw ex; 
    } finally { 
     // release resources 
    } 
} 

private void readFileMethod2() throws IOException { 
    try { 
     // do some IO stuff 
    } finally { 
     // release resources 
    } 
} 
+0

Estaba a punto de hacer esta pregunta yo mismo. Toma nota mental. – JohnMerlino

Respuesta

7

El finally todavía será ejecutado, independientemente de si se captura la IOException. Si todo tu bloque catch es re-lanzamiento, entonces no es necesario aquí.

4

No, es completamente innecesario detectar una excepción si no va a hacer otra cosa que tirarla.

Y sí, el bloque finally se seguirá ejecutando.

2

No, no es necesario detectar la excepción a menos que no pueda volver a lanzarla en su método. En el código que ha publicado, readFileMethod2 es la opción correcta a seguir.

1

finalmente se ejecuta siempre, independientemente de si se produce una excepción o no. Solo si la JVM se apaga mientras se ejecuta el bloqueo try o catch, entonces la cláusula finally no se ejecutará. Del mismo modo, si el subproceso que ejecuta el código try o catch se interrumpe o se cancela, el bloque finally no se puede ejecutar aunque la aplicación como un todo continúe.

Cuestiones relacionadas