T12 Manejo de Excepciones

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 17

Universidad Nacional Facultad de Ingeniería

de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones CLASE 12

Curso: Programación Orientada a Objetos I


Docente: Ms. Zoraida Yanet Vidal Melgarejo.

Excepciones -2-

• En el mundo de la programación hay algo que siempre ocurre: las


situaciones inesperadas o anómalas en los programas. Los
programadores de cualquier lenguaje se esfuerzan por escribir
programas libres de errores, sin embargo, es muy difícil que los
programas reales se vean libres de ellos.

• El lenguaje Java incorpora un soporte para manejar situaciones


anómalas, conocidas como “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.

2
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 1 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Excepciones -3-

• Una excepción puede ocurrir por muchas razones diferentes:


• Un usuario ha introducido datos no válidos.
• Un archivo que necesita ser abierto no se puede encontrar.
• Una conexión de red se ha perdido en el medio de las comunicaciones.
• La JVM se ha quedado sin memoria.

• Algunas de las excepciones son causadas por errores del usuario, otras por
error del programador, y otras por los recursos físicos que han fallado de
alguna manera.

• 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.

• Las excepciones son manejadas por código fuera del flujo normal de control
del programa.

Excepciones -4-

• 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.

• Con el sistema de manipulación de excepciones de Java, un programa


puede comunicar eventos inesperados a un contexto de ejecución más
capacitado para responder a tales eventos anormales.

• Utilizadas en forma adecuada, las excepciones incrementan en gran


medida la robustez de las aplicaciones.

4
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 2 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Un programa sin control de excepciones -5-

Un programa que controla excepciones -6-

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.

6
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 3 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Excepciones: Jerarquía base -7-

Excepciones: Jerarquía base -8-

• La clase Throwable representa todo lo que se puede “lanzar” en Java:


o Contiene una instantánea del estado de la pila en el momento en
el que se creó el objeto (“stack trace” o “call chain”).
o Almacena un mensaje (variable de instancia de tipo String) que
puede utilizarse para detallar el problema que se produjo.
o Puede tener una causa, también de tipo Throwable, que permite
representar el motivo que causó el error o la excepción.

8
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 4 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Excepciones: Jerarquía base -9-

• La clase Throwable tiene dos subclases: Error y Exception.

• 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.

Excepciones: Jerarquía base - 10 -

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


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

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


clase Throwable definida en el paquete java.lang. Tanto el intérprete
Java como muchos métodos de las múltiples clases de Java pueden
lanzar excepciones y errores.

10
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 5 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Clasificación de Excepciones - 11 -

• En Java las Excepciones se clasifican en:

• No verificadas en compilación:
Situaciones inesperadas de programación difíciles de
prever.

• Verificadas en compilación:
Situaciones predecibles y que pueden ser controladas.

11

Clasificación de Excepciones - 12 -

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


que el compilador verifica y que pueden recuperarse.

Java requiere que los métodos que disparan excepciones, las


capturen y manejen la situación inesperada o, especifiquen todas
las excepciones checked que pueden producirse dentro de su
alcance.

Estas excepciones no pueden ser simplemente ignoradas en el


momento de la compilación.

Una excepción verificada (o comprobada) es una excepción que


suele ser un error del usuario o de un problema que no puede ser
previsto por el programador. Por ejemplo, si un archivo se va a
abrir, pero el archivo no se puede encontrar, se produce una
excepción.

12
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 6 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Clasificación de Excepciones - 13 -

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.

13

Clasificación de Excepciones - 14 -

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


situaciones inesperadas de programación difíciles de prever. 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. Una excepción de este tipo es una excepción que
probablemente podría haberse evitado por el programador. Java no
obliga que éstas excepciones sean especificadas, ni capturadas para su
manejo, es decir, que se ignoran en el momento de la compilación.
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
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 7 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Clasificación de Excepciones - 15 -

15

Manejo de Excepciones - 16 -

Cuando un método se encuentra con una anomalía que no puede


resolver, lo lógico es que lance (throw) una excepción, esperando que
quien lo llamó directa o indirectamente la capture (catch) y maneje la
anomalía. Incluso él mismo podría capturar y manipular dicha
excepción.

Si la excepción no se captura, el programa finalizará automáticamente.

En java se utilizan las cláusulas: try, catch y finally en la estructura


del manejo de excepciones.

16
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 8 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones - 17 -

1. Bloque try…catch
• Se utiliza 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.
• 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.

17

Manejo de Excepciones - 18 -

• Flujo de ejecución:
Sin excepciones : 1->2->4
Con una excepción en el bloque 2 : 1->2*->3->4
Con una excepción en el bloque 1 : 1*

18
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 9 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones - 19 -

2. 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.

19

Manejo de Excepciones - 20 -

• Flujo de ejecución:
Sin excepciones : 1->2->5
Excepción de tipo aritmético en el bloque 2 : 1->2*->3->5
Acceso a un objeto nulo (null) en el bloque 2 : 1->2*->4->5
Excepción de otro tipo diferente en el bloque 2 : 1->2*

20
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 10 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones - 21 -

3. 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.

21

Manejo de Excepciones - 22 -

• Flujo de ejecución:
Sin excepciones : 1->2->4->5
Excepción de tipo aritmético en el bloque 2 : 1->2*->3->4->5
Excepción de otro tipo diferente en el bloque 2 : 1->2*->4

22
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 11 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones - 23 -

• La estructura básica de manejo de excepciones en Java es:

try {
// Sentencias que pueden generar la excepción
} catch(ExcepcionCapturada referencia) {
// Sentencias que responden a la excepción
} finally {
// Sentencias que se ejecutan siempre
}

23

Manejo de Excepciones - 24 -

• Pueden presentarse las siguientes variantes:

try {
//Sentencias
} catch(ExcepcionCapturada referencia) {
//Sentencias
} try {
//Sentencias
} finally {
//Sentencias
}

24
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 12 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Manejo de Excepciones - 25 -

try {
//Sentencias
} catch(ExcepcionCapturada1 referencia) {
//Sentencias
} catch(ExcepcionCapturada2 referencia) {
//Sentencias
} catch(ExcepcionCapturada3 referencia) {
//Sentencias
} finally {
//Sentencias
}

25

Manejo de Excepciones - 26 -

try {
//Sentencias
} catch(ExcepcionCapturada1 referencia) {
//Sentencias
} catch(ExcepcionCapturada2 referencia) {
//Sentencias
} catch(ExcepcionCapturada3 referencia) {
//Sentencias
}

26
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 13 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Lanzamiento de excepciones: throw - 27 -

• Lanzar una excepción equivale a crear un objeto de la clase de la excepción


para manipularlo fuera del flujo normal de ejecución del programa. Para
lanzar una excepción se utiliza la palabra reservada throw y para crear un
objeto, new.

• 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 new ObjetoThrowable();

Ejemplo:

27

Lanzamiento de excepciones: throw - 28 -

28
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 14 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Lanzamiento de excepciones: throw - 29 -

• 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.

29

Propagación de excepciones: throws - 30 -

• 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

30
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 15 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Excepciones personalizadas - 31 -

• En general, se creará un nuevo tipo de excepción cuando se requiera manejar un determinado tipo
de situación excepcional no contemplada por las excepciones proporcionadas por la biblioteca de
Java.
• Todos los tipos de excepción se corresponden con una clase derivada de Throwable, clase raíz de la
jerarquía de clases de excepciones en Java.
• El programador puede definir sus propias clases de excepciones, definiendo una clase que herede
de Throwable o generalmente de Exception.

31

Excepciones personalizadas - 32 -

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);
}
}

32
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 16 -
Universidad Nacional Facultad de Ingeniería
de Trujillo Escuela Profesional de Ingeniería de Sistemas

Excepciones personalizadas - 33 -

33

Resumen - 34 -

• Separación clara entre el tratamiento de situaciones inesperadas y el resto del código.


• Código más legible y mantenimiento más fácil.
• Propagar la excepción hasta el método que contenga un tratamiento adecuado.
• Sacar partido a la herencia, facilitando su agrupación/captura por afinidad y su comprensión.
• En los catch, las excepciones más específicas se tratan antes que las más genéricas.

34
Curso: Programación Orientada a Objetos I Tema: Manejo de Excepciones.
Docente: Ms. Zoraida Yanet Vidal Melgarejo Página - 17 -

También podría gustarte