
Una excepción se «levanta» (raise) en caso de un error e indica una condición anormal que no se debe encontrar durante la ejecución normal de código. Una excepción indica una necesidad urgente de tomar una acción reparadora (de remedio).
La palabra excepción indica aquí una excepción software. No se debe confundir con una excepción hardware. Una excepción software se produce por una parte de código escrita por un programador. No tiene nada que ver con las excepciones hardware. Una excepción software se inicia en alguna sentencia del código que encuentra una condición anormal.
Una excepción es un error de programa que ocurre durante la ejecución. Si ocurre una excepción y está activo un segmento de código denominado manejador de excepción para esa excepción, entonces el flujo de control se transfiere al manejador. Si en lugar de ello ocurre una excepción y no existe un manejador para la excepción, ésta se propaga al método invocante; si en éste tampoco se capta la excepción se propaga al que a su vez le llamó; si llega al método por el que empieza la ejecución (main()) y tampoco es captada, la ejecución termina.
Una excepción se puede levantar cuando «el contrato» entre el llamador y el llamado se violan. Por ejemplo, si se intenta acceder a un elemento que está fuera del rango válido de un arreglo se produce una violación del contrato entre el método que controla los índices (operador [] en Java) y el llamador que utiliza el arreglo. La función de índices garantiza que devuelve el elemento correspondiente si el índice que se le ha pasado es válido. Pero si el índice no es válido, la función de índice debe indicar la condición de error. Siempre que se produzca tal violación del contrato se debe levantar (alzar) una excepción. Una vez que se levanta una excepción, esta no desaparece aunque el programador lo ignore (una excepción no se puede ignorar ni suprimir). Una condición de excepción se debe reconocer y manejar. Una excepción no manejada se propagará dinámicamente hasta alcanzar el nivel más alto de la función (main en Java). Si también falla el nivel de función más alto, la aplicación termina sin opción posible.
Precaución
El manejo de errores usando excepciones no evita errores, solo permite la detección y posible recuperación de los mismos.
En general, el mecanismo de excepciones en Java permite:
- Detección de errores, enérgica y posible recuperación.
- Limpieza y salida elegante en caso de errores no manejados; y
- Propagación sistemática de errores en una cadena de llamadas dinámicas.