You are on page 1of 28

Manejo de Excepciones

Tecnología de la Programación I
Ing. Zoraida Vidal Melgarejo, Mg.

1
Excepciones

• Una excepción es un evento que ocurre durante la ejecución


de un programa y detiene el flujo normal de la secuencia de
instrucciones de ese programa; en otras palabras, una
excepción es una condición anormal que surge en una
secuencia de código durante su ejecución.

• Una excepción es un objeto que describe una condición


excepcional producida en un fragmento de código. Esta
excepción se detecta en tiempo de ejecución y no durante la
compilación del código.

2
Excepciones

• Una excepción, interrumpe el procesamiento normal porque


no cuenta con la información necesaria para resolver el
problema, en el contexto en el que sucedió. Todo lo que se
puede hacer es abandonar dicho contexto y pasar el
problema a un contexto de más alto nivel.

• Las excepciones en Java están destinadas, al igual que en el


resto de los lenguajes que las soportan, para la detección y
corrección de errores. Utilizadas en forma adecuada, las
excepciones incrementan en gran medida la robustez de las
aplicaciones.
3
Un programa sin control de excepciones

4
Un programa sin control de excepciones

El bloque de código intenta recuperar el elemento de índice 5


del array alumnos, al no existir dicha referencia se lanza la
excepción ArrayIndexOutBoundsException, al no
contemplar ninguna acción para este caso el programa detiene
su ejecución.

5
Un programa que controla excepciones

6
Un programa que controla excepciones

Este bloque de código también desea acceder al elemento de


índice 5 que no tiene ninguna referencia, pero a diferencia del
anterior, este suceso ha sido previsto y se muestra un mensaje
al usuario indicando que no hay elementos en el arreglo y la
ejecución del programa termina de manera natural.

7
Excepciones. Jerarquía base

8
Excepciones. Jerarquía base

• Una excepción es un objeto derivado directa, o


indirectamente, de la clase Throwable. Tanto el intérprete
Java como muchos métodos de las múltiples clases de Java
pueden lanzar excepciones y errores. La clase Throwable
tiene dos subclases: Error y Exception.

9
Excepciones. Jerarquía base

• Un Error indica que se produce un fallo no recuperable, del


que no se puede recuperar la ejecución normal del
programa, por lo tanto en este caso no hay nada que hacer.
Los errores, normalmente, hacen que el intérprete Java
presente un mensaje en el dispositivo estándar de salida y
concluya la ejecución del programa.

10
Excepciones. Jerarquía base

• Una Exception indicará una condición anormal que puede


ser subsanada para evitar la terminación de la ejecución del
programa.

11
Clasificación de Excepciones

• Verificadas en Compilación (Checked exception): son


errores que el compilador verifica y que pueden recuperarse.
Java requiere que los métodos que disparan excepciones, las
capturen y manejen el error o, especifiquen todas las
excepciones checked que pueden producirse dentro de su
alcance. Por ejemplo, al intentar abrir un archivo, podría
dispararse una excepción, ya que el archivo puede no
existir.

12
Clasificación de Excepciones

• No Verificadas en Compilación (Unchecked exception):


representan errores de programación difíciles de preveer.
Son excepciones disparadas automáticamente por el sistema
de ejecución de Java. Por ejemplo, las excepciones
aritméticas (división por cero), excepciones de referencias
nulas (acceso a un objeto mediante un puntero nulo),
excepciones de indexación (acceso a un elemento de un
arreglo con un índice muy chico o demasiado grande) y
error de casting. Java no obliga que éstas excepciones sean
especificadas, ni capturadas para su manejo.

13
Clasificación de Excepciones
Toda excepción que herede de RuntimeException será una excepción no
verificada en compilación, ya que depende de la ejecución del programa
para que pueda lanzarse.

14
Clasificación de Excepciones
Toda excepción que sea subclase de Exception (excepto RuntimeException)
es verificada en tiempo de compilación. Exception y sus subclases indican
situaciones que una aplicación debería tratar de forma razonable.

15
Jerarquía de Excepciones

16
Captura de excepciones: Bloque try…catch

• Se utilizan para capturar las excepciones que se han podido


producir en el bloque de código delimitado por try y catch.

• En cuanto se produce la excepción, la ejecución del bloque


try, que la contiene, termina. La cláusula catch recibe como
argumento un objeto Throwable.

17
Captura de excepciones: Bloque try…catch

• try
Es el bloque de código donde se prevé que se genere una
excepción. El bloque try tiene que ir seguido, al menos, por
una cláusula catch o una cláusula finally.

• catch
Es el código que se ejecuta cuando se produce la excepción.
No hay código alguno entre un bloque try y un bloque
catch, ni entre bloques catch.

18
Captura de excepciones: Bloque try…catch

//Bloque 1
try {
// Bloque 2
} catch (Exception e) {
// Bloque 3
}
// Bloque 4

19
Captura selectiva de excepciones

Es posible manejar con la clase Exception todas las


excepciones lanzadas desde cualquier punto, ya que todas las
excepciones derivan de Exception, aunque el tratamiento sería
igual para cada una de ellas, sin poder tener un tratamiento
especial en cada caso.

Por otro lado, uno puede capturar Excepciones específicas


indicándolas en el bloque catch; además, pueden tener tantos
bloques catch como errores predecibles dentro del bloque try.

20
Captura selectiva de excepciones

//Bloque 1
try {
// Bloque 2
} catch (ArithmeticException ex) {
// Bloque 3
} catch (NullPointerException ex) {
// Bloque 4
}
// Bloque 5

21
La cláusula finally

• En ocasiones, nos interesa ejecutar un fragmento de código


independiente de si se produce o no una excepción (por
ejemplo, cerrar un archivo que estemos manipulando o una
conexión a una fuente de datos).
• Si el cuerpo del bloque try llega a comenzar su ejecución, el
bloque finally siempre se ejecutará:
– Detrás del bloque try si no se producen excepciones.
– Después de un bloque catch si éste captura la excepción.
– Justo después de que se produzca la excepción si ninguna
cláusula catch captura la excepción y antes de que la
excepción se propague hacia arriba.

22
La cláusula finally

//Bloque 1
try {
// Bloque 2
} catch (Exception e) {
// Bloque 3
} finally {
// Bloque 4
}
// Bloque 5

23
Lanzamiento de excepciones
La sentencia throw
• La sentencia throw se utiliza para lanzar explícitamente una
excepción. En primer lugar se debe obtener un descriptor de
un objeto Throwable, bien mediante un parámetro en una
cláusula catch o, se puede crear utilizando el operador new.

• La forma general de la sentencia throw es:

throw ObjetoThrowable;

24
Lanzamiento de excepciones
La sentencia throw

25
Lanzamiento de excepciones
La sentencia throw
• El flujo de la ejecución se detiene inmediatamente después
de la sentencia throw, y nunca se llega a la sentencia
siguiente. Se inspecciona el bloque try que la engloba más
cercano, para ver si tiene la cláusula catch cuyo tipo
coincide con el del objeto o instancia Throwable. Si se
encuentra, el control se transfiere a esa sentencia. Si no, se
inspecciona el siguiente bloque try que la engloba, y así
sucesivamente, hasta que el gestor de excepciones más
externo detiene el programa y saca por pantalla el trazado de
lo que hay en la pila hasta que se alcanzó la sentencia throw.

26
Propagación de excepciones
La sentencia throws
• La palabra clave throws se utiliza para identificar la lista
posible de excepciones que un método puede lanzar.

• La sentencia throws obliga al quién invoque el método usar


un bloque try…catch o propagarlo con otro throws.

27
Creación de clases de Excepciones

• Se debe definir una nueva clase subclase de la clase


Exception.

class MiExcepcion extends Exception {


public MiException() { }
// si se quiere mostrar un cierto mensaje
// se debe definir este segundo constructor
public MiException(String msg) {
super(msg);
}
}

28

You might also like