10 manejo de excepciones

Upload: jean-paul-perea

Post on 08-Apr-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/7/2019 10 Manejo de Excepciones

    1/28

    1

    Manejo de Excepciones

    Tecnologa de la Programacin IIng. Zoraida Vidal Melgarejo, Mg.

  • 8/7/2019 10 Manejo de Excepciones

    2/28

    2

    Excepciones

    Una excepcin es un evento que ocurre durante la ejecucin

    de un programa y detiene el flujo normal de la secuencia de

    instrucciones de ese programa; en otras palabras, una

    excepcin es una condicin anormal que surge en unasecuencia de cdigo durante su ejecucin.

    Una excepcin es un objeto que describe una condicin

    excepcional producida en un fragmento de cdigo. Estaexcepcin se detecta en tiempo de ejecucin y no durante la

    compilacin del cdigo.

  • 8/7/2019 10 Manejo de Excepciones

    3/28

    3

    Excepciones

    Una excepcin, interrumpe el procesamiento normal porque

    no cuenta con la informacin necesaria para resolver el

    problema, en el contexto en el que sucedi. Todo lo que se

    puede hacer es abandonar dicho contexto y pasar elproblema a un contexto de ms alto nivel.

    Las excepciones en Java estn destinadas, al igual que en el

    resto de los lenguajes que las soportan, para la deteccin ycorreccin de errores. Utilizadas en forma adecuada, las

    excepciones incrementan en gran medida la robustez de las

    aplicaciones.

  • 8/7/2019 10 Manejo de Excepciones

    4/28

    4

    Un programa sin control de excepciones

  • 8/7/2019 10 Manejo de Excepciones

    5/28

    5

    Un programa sin control de excepciones

    El bloque de cdigo intenta recuperar el elemento de ndice 5

    del array alumnos, al no existir dicha referencia se lanza la

    excepcin ArrayIndexOutBoundsException , al nocontemplar ninguna accin para este caso el programa detiene

    su ejecucin.

  • 8/7/2019 10 Manejo de Excepciones

    6/28

    6

    Un programa que controla excepciones

  • 8/7/2019 10 Manejo de Excepciones

    7/28

    7

    Un programa que controla excepciones

    Este bloque de cdigo tambin 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 mensajeal usuario indicando que no hay elementos en el arreglo y la

    ejecucin del programa termina de manera natural.

  • 8/7/2019 10 Manejo de Excepciones

    8/28

    8

    Excepciones. Jerarqua base

  • 8/7/2019 10 Manejo de Excepciones

    9/28

    9

    Excepciones. Jerarqua base

    Una excepcin es un objeto derivado directa, o

    indirectamente, de la clase Throwable. Tanto el intrprete

    Java como muchos mtodos de las mltiples clases de Java

    pueden lanzar excepciones y errores. La clase Throwable

    tiene dos subclases: Error y Exception.

  • 8/7/2019 10 Manejo de Excepciones

    10/28

    10

    Excepciones. Jerarqua base

    Un Error indica que se produce un fallo no recuperable, delque no se puede recuperar la ejecucin normal del

    programa, por lo tanto en este caso no hay nada que hacer.

    Los errores, normalmente, hacen que el intrprete Java

    presente un mensaje en el dispositivo estndar de salida yconcluya la ejecucin del programa.

  • 8/7/2019 10 Manejo de Excepciones

    11/28

    11

    Excepciones. Jerarqua base

    Una Exception indicar una condicin anormal que puede

    ser subsanada para evitar la terminacin de la ejecucin del

    programa.

  • 8/7/2019 10 Manejo de Excepciones

    12/28

    12

    Clasificacin de Excepciones

    Verificadas en Compilacin (Checked exception): son

    errores que el compilador verifica y que pueden recuperarse.

    Java requiere que los mtodos que disparan excepciones, las

    capturen y manejen el error o, especifiquen todas lasexcepciones checked que pueden producirse dentro de su

    alcance. Por ejemplo, al intentar abrir un archivo, podra

    dispararse una excepcin, ya que el archivo puede no

    existir.

  • 8/7/2019 10 Manejo de Excepciones

    13/28

    13

    Clasificacin de Excepciones

    No Verificadas en Compilacin (Unchecked exception):

    representan errores de programacin difciles de preveer.

    Son excepciones disparadas automticamente por el sistema

    de ejecucin de Java. Por ejemplo, las excepcionesaritmticas (divisin por cero), excepciones de referencias

    nulas (acceso a un objeto mediante un puntero nulo),

    excepciones de indexacin (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.

  • 8/7/2019 10 Manejo de Excepciones

    14/28

    14

    Clasificacin de Excepciones

    Toda excepcin que herede de RuntimeException ser una excepcin noverificada en compilacin, ya que depende de la ejecucin del programa

    para que pueda lanzarse.

  • 8/7/2019 10 Manejo de Excepciones

    15/28

    15

    Clasificacin de Excepciones

    Toda excepcin que sea subclase de Exception (excepto RuntimeException)es verificada en tiempo de compilacin. Exception y sus subclases indican

    situaciones que una aplicacin debera tratar de forma razonable.

  • 8/7/2019 10 Manejo de Excepciones

    16/28

    16

    Jerarqua de Excepciones

  • 8/7/2019 10 Manejo de Excepciones

    17/28

    17

    Captura de excepciones: Bloque trycatch

    Se utilizan para capturar las excepciones que se han podido

    producir en el bloque de cdigo delimitado por try y catch.

    En cuanto se produce la excepcin, la ejecucin del bloque

    try, que la contiene, termina. La clusula catch recibe como

    argumento un objeto Throwable.

  • 8/7/2019 10 Manejo de Excepciones

    18/28

    18

    Captura de excepciones: Bloque trycatch

    try

    Es el bloque de cdigo donde se prev que se genere una

    excepcin. El bloque try tiene que ir seguido, al menos, por

    una clusula catch o una clusula finally.

    catch

    Es el cdigo que se ejecuta cuando se produce la excepcin.

    No hay cdigo alguno entre un bloque try y un bloque

    catch, ni entre bloques catch.

  • 8/7/2019 10 Manejo de Excepciones

    19/28

    19

    Captura de excepciones: Bloque trycatch

    //Bloque 1

    try {

    // Bloque 2

    } catch (Exception e) {

    // Bloque 3

    }

    // Bloque 4

  • 8/7/2019 10 Manejo de Excepciones

    20/28

    20

    Captura selectiva de excepciones

    Es posible manejar con la clase Exception todas las

    excepciones lanzadas desde cualquier punto, ya que todas las

    excepciones derivan deException, aunque el tratamiento sera

    igual para cada una de ellas, sin poder tener un tratamientoespecial en cada caso.

    Por otro lado, uno puede capturar Excepciones especficas

    indicndolas en el bloque catch; adems, pueden tener tantosbloques catch como errores predecibles dentro del bloque try.

  • 8/7/2019 10 Manejo de Excepciones

    21/28

    21

    Captura selectiva de excepciones

    //Bloque 1

    try {

    // Bloque 2

    } catch (ArithmeticException ex) {

    // Bloque 3

    } catch (NullPointerException ex) {

    // Bloque 4}

    // Bloque 5

  • 8/7/2019 10 Manejo de Excepciones

    22/28

    22

    La clusula finally

    En ocasiones, nos interesa ejecutar un fragmento de cdigo

    independiente de si se produce o no una excepcin (por

    ejemplo, cerrar un archivo que estemos manipulando o una

    conexin a una fuente de datos). Si el cuerpo del bloque try llega a comenzar su ejecucin, el

    bloquefinally siempre se ejecutar:

    Detrs del bloque try si no se producen excepciones.

    Despus de un bloque catch si ste captura la excepcin. Justo despus de que se produzca la excepcin si ninguna

    clusula catch captura la excepcin y antes de que la

    excepcin se propague hacia arriba.

  • 8/7/2019 10 Manejo de Excepciones

    23/28

    23

    La clusula finally

    //Bloque 1

    try {

    // Bloque 2

    } catch (Exception e) {

    // Bloque 3

    } finally {

    // Bloque 4}

    // Bloque 5

  • 8/7/2019 10 Manejo de Excepciones

    24/28

    24

    Lanzamiento de excepciones

    La sentencia throw

    La sentencia throw se utiliza para lanzar explcitamente una

    excepcin. En primer lugar se debe obtener un descriptor de

    un objeto Throwable, bien mediante un parmetro en una

    clusula catch o, se puede crear utilizando el operador new.

    La forma general de la sentencia throw es:

    throw ObjetoThrowable;

  • 8/7/2019 10 Manejo de Excepciones

    25/28

    25

    Lanzamiento de excepciones

    La sentencia throw

  • 8/7/2019 10 Manejo de Excepciones

    26/28

    26

    Lanzamiento de excepciones

    La sentencia throw

    El flujo de la ejecucin se detiene inmediatamente despus

    de la sentencia throw, y nunca se llega a la sentencia

    siguiente. Se inspecciona el bloque try que la engloba ms

    cercano, para ver si tiene la clusula catch cuyo tipocoincide 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 ms

    externo detiene el programa y saca por pantalla el trazado delo que hay en la pila hasta que se alcanz la sentencia throw.

  • 8/7/2019 10 Manejo de Excepciones

    27/28

    27

    Propagacin de excepciones

    La sentencia throws

    La palabra clave throws se utiliza para identificar la lista

    posible de excepciones que un mtodo puede lanzar.

    La sentencia throws obliga al quin invoque el mtodo usar

    un bloque trycatch o propagarlo con otro throws.

  • 8/7/2019 10 Manejo de Excepciones

    28/28

    28

    Creacin de clases de Excepciones

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

    }

    }

    Se debe definir una nueva clase subclase de la clase

    Exception.