Escolar Documentos
Profissional Documentos
Cultura Documentos
Try Finally
Un finally se ejecuta siempre; da lo mismo cmo termin el try: normal, return, error Java garantiza que se ejecutar la primera sentencia del finally. Las otras puede que no se ejecuten debido a excepciones Se recomienda que un finally libere slo un recurso (que tenga slo una sentencia) Para varios recursos, se recomienda que anide los finally uno dentro de otro
Excepciones
checked unchecked
Error
VirtualMachineError
Perdemos toda la info de la excepcin (mensaje, stack, causa), y retornamos un valor especial El que llama debe revisar el valor retornado, y si se olvida, no se entera que ocurri un error
El que llama puede usar catch selectivos Las excepciones dan detalles de implementacin: encapsulacin pobre y posible acoplamiento No podemos agregar y/o eliminar excepciones de la lista debido a cambios en la implemencin
Se pierde el detalle de los errores, y el que llama al mtodo no puede usar catch selectivos Podemos cambiar la implementacin interna sin tener que cambiar la declaracin del mtodo
No perdemos la info de la excepcin (mensaje, stack, causa), y no tenemos que declarar Podemos cambiar la implementacin interna sin tener que cambiar la declaracin del mtodo
Con todas las ventajas de la tcnica anterior, pero ahora entregamos informacin del contexto del error (en este caso, el nombre del archivo)
Con todas las ventajas de la tcnica anterior, pero ahora podemos atrapar la excepcin en catch sin confundir con otras excepciones
Declaracin de ObtenerException
public class ObtenerException extends RuntimeException { public ObtenerException(String message, Throwable cause) { super(message, cause); } }
Como se observa, definir una excepcin de este tipo requiere de programacin muy, muy simple Estas excepciones pueden ser de tipo checked (heredan de Exception) o unchecked (heredan de RuntimeException)
Logging de Excepciones
En cuanto ocurre un error, se hace logging de la info de la excepcin (mensaje, stack, causa) Logging: System.out, printStackTrace, log4j,
try { b c(); } catch (Exception ex) { throw new Exception("", ex); } try { c d(); } catch (Exception ex) { throw new Exception("", ex); }
Regla: dispare (throw) una excepcin si ella podr ser atrapada (catch) en uno de sus mtodos, de lo contrario haga logging Debe hacer logging cuando vaya a perder control de la excepcin. Por ejemplo en:
Comentarios finales
Haga logging de una excepcin slo una vez, en el mtodo que inici el trabajo
Muchas gracias