2.9 Manejo de Excepciones

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

2.

9 Manejo de excepciones
Una excepción es una situación anómala que puede provocar que el programa no funcione
de forma correcta o termine de forma inesperada. Ejemplos de situaciones que provocan una
excepción:
 No hay memoria disponible para asignar
 Acceso a un elemento de un array fuera de rango
 Leer por teclado un dato de un tipo distinto al esperado
 Error al abrir un fichero
 División por cero
 Problemas de Hardware
Si la excepción no se trata, el manejador de excepciones realiza lo siguiente:
 Muestra la descripción de la excepción.
 Muestra la traza de la pila de llamadas.
 Provoca el final del programa.
El manejo de excepciones proporciona una separación entre el código básico y el código
que maneja los errores, haciéndolo más legible.
Utilizando excepciones se consigue:

 Separar las instrucciones del programa de las del tratamiento de errores.


 Evitar llenar el código del programa de instrucciones de comprobación (if, switch, etc).
 El código es más simple de escribir ya que no se fuerza al programador a comprobar
los errores constantemente.

¿Qué ocurre cuando se produce una excepción?


Cuando ocurre una excepción:
 La Máquina Virtual Java crea un objeto excepción y lo lanza. El objeto excepción
creado contiene información sobre el error. La ejecución normal del programa se
detiene.
 El sistema busca en el método donde se ha producido la excepción un manejador de
excepciones que capture ese objeto y trate la excepción.

1
 Si el método no contiene un manejador para la excepción se busca en el método que
llamó a este y así sucesivamente en toda la pila de llamadas.
 Cuando se encuentra un manejador apropiado se le pasa la excepción. Un manejador
de excepciones es considerado apropiado si el tipo de objeto excepción lanzado es
compatible al tipo que puede manejar.
 Si no se encuentra un manejador adecuado la Máquina Virtual Java muestra el error y
acaba el programa.

JERARQUÍA DE EXCEPCIONES
Todas las excepciones lanzadas automáticamente en un programa Java son objetos de la
clase Throwable o de alguna de sus clases derivadas.

La clase Throwable deriva directamente de Object y tiene dos clases derivadas directas: Error
y Exception.

Resumen de la jerarquía de clases derivadas de Throwable.

2
3
La clase Error está relacionada con errores de la máquina virtual de Java. Generalmente
estos errores no dependen del programador por lo que no nos debemos preocupar por
tratarlos, por ejemplo OutOfMemoryError, StackOverflowError, errores de hardware, etc.
En la clase Exception se encuentran las excepciones que se pueden lanzar en una aplicación.
Tiene varias subclases entre ellas:
 RuntimeException: excepciones lanzadas durante la ejecución del programa. Por
ejemplo: ArithmeticExcepcion, NullPointerException,
ArrayIndexOutOfBoundsException, etc. Pertenecen al paquete java.lang.
 IOException: excepciones lanzadas al ejecutar una operación de entrada-salida.
Pertenecen al paquete java.io.
 ClassNotFoundException: excdepción lanzada cuando una aplicación intenta cargar
una clase pero no se encuentra el fichero .class correspondiente

TRATAMIENTO DE EXCEPCIONES Bloques try – catch - finally


Un programa que trate las excepciones debe realizar lo siguientes pasos:
1. Se intenta ( try ) ejecutar un bloque de código.
2. Si se produce una circunstancia excepcional se lanza ( throw ) una excepción. En caso
contrario el programa sigue su curso normal.
3. Si se ha lanzado una excepción, la ejecución del programa es desviada al manejador de
excepciones donde la excepción se captura ( catch ) y se decide qué hacer al respecto.

El esquema general en Java es:


try{
     //Instrucciones que se intentan ejecutar, si se produce una
     //situación inesperada se lanza una excepción
}
catch(tipoExcepcion e){
     //Instrucciones para tratar esta excepción
}
catch(otroTipoExcepcion e){
     //Instrucciones para tratar esta excepción

4
}
     //Se pueden escribir tantos bloques catch como sean necesarios
finally{
     // instrucciones que se ejecutarán siempre después de un bloque try
     // se haya producido o no una excepción
}
Bloque try:
En el bloque try se encuentran las instrucciones que pueden lanzar una excepción.
Solamente se pueden capturar las excepciones lanzadas dentro de un bloque try.
Una excepción se puede lanzar de forma automática o mediante la palabra reservada throw.
Cuando se lanza la excepción se transfiere la ejecución del programa desde el punto donde
se lanza la excepción a otro punto donde se captura la excepción.

Bloque catch:
Es el bloque de código donde se captura la excepción. El bloque catch es el manejador o
handler de la excepción. Aquí se decide qué hacer con la excepción capturada. Puede haber
varios bloques catch relacionados con un bloque try.
Una vez finalizado un bloque catch la ejecución no vuelve al punto donde se lanzó la
excepción. La ejecución continúa por la primera instrucción a continuación de los bloques
catch.

Bloque finally:
Es opcional.
Debe aparecer a continuación de los bloques catch.
También puede aparecer a continuación de un bloque try si no hay bloques catch.
La ejecución de sus instrucciones queda garantizada independientemente de que el bloque try
acabe o no su ejecución incluso en estos casos:
 Aunque el bloque try tenga una sentencia return, continue o break, se ejecutará el
bloque finally
 Cuando se haya lanzado una excepción que ha sido capturada por un bloque catch. El
finally se ejecuta después del catch correspondiente.

5
 Si se ha lanzado una excepción que no ha sido capturada, se ejecuta el finally antes de
acabar el programa.

Un bloque finally se usa para dejar un estado consistente después de ejecutar el bloque try.

EXCEPCIONES MARCADAS Y NO MARCADAS (checked y unchecked)


Excepciones no marcadas (unchecked) son aquellas que no estamos obligados a tratar.
Pertenecen a la clase Error y a sus clases derivadas y a la clase RuntimeException y sus
clases derivadas.

Excepciones marcadas (checked) son aquellas que estamos obligados a tratar. Son todas las
clases derivadas de la clase Exception excepto las derivadas de RuntimeException.

El compilador Java obliga a declarar o capturar las excepciones marcadas.


El compilador muestra un mensaje de error si no se tratan o no se declara que son lanzadas
de forma explícita.

También podría gustarte