Capitulo 7 - Certificacion Java
Camilo Nova
CEOExcepciones y aserciones.
Las excepciones de tipo 'Runtime' no son marcadas por el compilador, y no es necesario que el programador las maneje, aunque no es prohibido que lo haga.
Un bloque de codigo 'catch' solamente es ejecutado si atrapa una excepcion que provenga de un bloque 'try' correspondiente.
Una vez que la ejecucion del programa alcanza un bloque 'try' y una excepcion ocurre, el bloque 'finally', si existe, es siempre ejecutado independientemente si fue o no capturada una excepcion, a menos que, bajo circunstancias extremas como un llamado a System.exit() ocurran.
Hay dos reglas en la ejecucion de bloques 'catch'
- Solamente un bloque 'catch' relevante a la excepcion y encontrado primero por el control de ejecucion, sera el bloque ejecutado para dicha excepcion.
- Los bloques 'catch' mas especificos (de menor jerarquia en el arbol de clases) deben preceder a los menos especificos (los mas generales). La violacion a esta regla genera un error de compilacion.
Una excepcion puede ser tratada solo por un bloque 'catch', donde en dicho bloque en sus parentesis debe existir la clase que representa la excepcion en si misma.
Si una excepcion no es capturada por ningun bloque 'catch', una de las siguientes acciones ocurre:
- Si no hay un bloque 'finally', la ejecucion se detiene en el punto donde se lanzo la excepcion y retorna al metodo que la llamo.
- Si hay un bloque 'finally' la ejecucion salta del punto donde se lanzo la excepcion al bloque 'finally' y retorna al metodo que la llamo luego del bloque 'finally'.
Si una excepcion es capturada por un bloque 'catch', caso contrario al anterior, ocurre uno de los siguientes casos:
- Si existe un bloque 'finally', el control de ejecucion ejecuta el bloque 'catch' y luego el 'finally', para luego continuar con el metodo que la llamo.
- Si no existe un bloque 'finally', pasa a ejecutar el bloque 'catch' y luego continua con el metodo que la llamo.
El bloque 'try' debe estar seguido bien de un bloque 'catch' o 'finally', o ambos. El bloque 'try' por si mismo es ilegal. Cualquier bloque 'catch' debe estar precedido de un bloque 'try', y un bloque 'finally' debe continuar luego del ultimo bloque 'catch' o del bloque 'try' si no existe un bloque 'catch'.
Se debe tener en cuenta al momento de sobrecargar un metodo que lanze una excepcion:
- Si el metodo a sobrecargar no lanza ninguna excepcion, el metodo que sobrecarga no puede lanzar ninguna excepcion, pero aun asi podra lanzar una excepcion en ejecucion.
- Si el metodo a sobrecargar lanza alguna excepcion, es legal para el metodo que sobrecarga no lanzar ninguna excepcion.
Para ejecutar un programa con aserciones se pasa el parametro -ea (enableassertions) al momento de ser ejecutado.
Es clave recordar que las aserciones deben ser usadas unicamente con propositos de pruebas y no debe confiarse en ellas para una aplicacion en produccion.
Written by Camilo Nova
As the Axiacore CEO, Camilo writes about the intersection of technology, design, and business. With a strategic mindset and a deep understanding of the industry, he is dedicated to helping companies grow.