2012-04-01 11 views
9

¿Se considera mala programación escribir un try y catch dentro de una cláusula finally?try catch in finally section

Tengo en mi método principal un fileInputStream que quiero cerrar. Quiero colocar .close() en el final, por lo que se cerrará sin importar qué. No quiero añadir una declaración a tiros el método principal, ya que es el principal método: P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

¿está bien? Gracias

+8

Sí, esto está bien y es a veces necesario. –

+1

Si solo va a volver a lanzar la excepción, no necesita la captura de prueba. La captura de prueba es necesaria porque se supone que debes hacer algo con la excepción (como mínimo, iniciar sesión), si decides no hacerlo, entonces no es necesario. – SJuan76

+0

Necesito imprimir algo en System.err y luego System.exit Eso es lo que hace el método throwExcpetion (e) –

Respuesta

9

El patrón de necesidad de try/catch en los métodos finally es, por desgracia, un patrón recurrente en Java 6 y anteriores. Yo diría que en realidad ES una mala práctica, pero no una que realmente puedas evitar en Java 6 (mira abajo para Java 7).

Un problema adicional es que cualquier nueva excepción lanzada en el bloque finally anulará las excepciones que se lanzaron antes de llegar a este bloque.

En Java 7 hay específicamente para los casos donde los recursos deben ser cerrados (la mayoría de los casos de uso para las construcciones try/finally/try/catch) el nuevo constructo try-with-resources. Esto también capturará las excepciones primarias y secundarias.

El uso de esta construcción es, pues, ahora una mejor práctica en el JDK 7 y sí, el código que muestran es por lo tanto una mala práctica en Java 7.

+0

Estoy obligado a usar solo Java 6. La escuela aún no aprobó 7. –