Foros del Web » Programación para mayores de 30 ;) » Java »

try catch dentro de finally

Estas en el tema de try catch dentro de finally en el foro de Java en Foros del Web. amigos me encargaron revisar un codigo y me llamo la atencion ver esto finally{ try{ .... } catch{ ... } } es correcto esto? Ahora ...
  #1 (permalink)  
Antiguo 13/04/2009, 15:17
 
Fecha de Ingreso: junio-2008
Mensajes: 53
Antigüedad: 15 años, 11 meses
Puntos: 1
De acuerdo try catch dentro de finally

amigos me encargaron revisar un codigo y me llamo la atencion ver esto

finally{
try{
....
}
catch{
...
}
}

es correcto esto?

Ahora otra cosa que veo es:
catch () {
....
throw error;
}

este trhow dentro del "catch" es correcto.

les agradecere la ayuda
  #2 (permalink)  
Antiguo 13/04/2009, 19:01
 
Fecha de Ingreso: septiembre-2007
Mensajes: 122
Antigüedad: 16 años, 7 meses
Puntos: 1
Respuesta: try catch dentro de finally

Saludos.

En realidad no se debe emplear, para eso existen la cláusula catch y finally por separado, para capturar errores, excepciones e interrupciones.

Lo que indican esos dos fragmentos de código es que hay errores redundantes que incluso al ser capturados en la claúsula catch o finally no se logran corregir.

Y con respecto al throw es un atentado social a las buenas prácticas de programación, ya que dentro de la captura de una posible excepción previa se lanza la probabilidad de que exista otra nueva.

Espero haberte sido de ayuda.
  #3 (permalink)  
Antiguo 14/04/2009, 00:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Respuesta: try catch dentro de finally

El try/catch dentro de un bloque finally no es de por si incorrecto, ya que a veces es necesario hacer alguna operación en un finally que podría lanzar una excepción.
Los casos más tipicos son los de cerrar una conexión a BDD o cerrar un Stream, cosas que se hacen habitualmente en un finally y que lanzan excepciones, por lo que hay que hacer un try/catch dentro del finally.

Lo de lanzar una excepcion dentro de un catch, tampoco es incorrecto siempre. Muchas veces es habitual si quieres "enmascarar" una excepción y que a la capa de arriba no le salte cualquier tipo de excepción si no unas excepciones controladas.

Por ejemplo, si tu lógica sólo puede lanzar MiAppException, entonces capturas todas las demás, creas una nueva MiAppException, le inicializas el contexto con initCause (muy importante) y lanzas la nueva MiAppException. De esta forma las clases que llaman a tu lógica solo tienen que tratar las MiAppException y no tratar cualquier cosa que pueda ser llamada internamente por tu lógica. Cuando encapsulas la lógica, tambien se suelen encapsular las excepciones.

De todas formas, como cualquier mecanismo de programación, también se pueden usar mal y hacer un catch de una excepción para lanzar Exception sin ni siquiera pintar la traza y sin inicializar bien el contexto de la nueva excepción, es una barbaridad desde el punto de vista de la programación.

Pero así de buenas a primeras, ninguna de las dos cosas es ni buena ni mala.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:19.