jueves, 19 de noviembre de 2009

Control de 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 del programa.

El control de dichas excepciones se utiliza para la detección y corrección de errores. Si hay un error, la aplicación no debería "morirse".

Para manejar las excepciones en Java, se actúa de la siguiente manera:
  • Se intenta (try) ejecutar la sentencia o bloque de sentencias que pueden producir algún error.
  • Se captura (catch) las posibles excepciones que se hayan podido producir, ejecutando una serie de sentencias que informen o intenten resolver el error.
  • Finalmente (finally) se puede ejecutar una serie de sentencias tanto si se ha producido un error como si todo ha ido bien.
Se debe utilizar el siguiente formato:

    try
    {
        Sentencias que pueden producir error
    }
    catch(ClaseExcepción variableRecogeExcepción)
    {
        Sentencias que informan o procuran solucionar el error.
        Puede haber varios catch.
        La variable no se tiene declarar antes.
    }
    finally
    {
        Sentencias que deben ejecutarse en cualquier caso (opcional)
    }
El elemento ClaseExcepción que aparece junto a catch, debe ser una de las clases de excepción que utiliza Java. Al generarse el error durante la ejecución podemos comprobar qué clase de excepción se ha producido. De forma general, la clase Exception recoge todos los tipos de excepciones. Si se desea un control más exhaustivo del tipo de error que se produce, se debe concretar más la clase de excepción correspondiente.

Por ejemplo, cuando se intenta convertir al tipo de dato numérico entero un dato introducido por el usuario en un campo de texto se utiliza una sentencia como:
    int num = Integer.valueOf(campoNúmero.getText());
Si el valor introducido no es numérico, sino una cadena de caracteres, la llamada a Integer.valueOf produce una excepción, como se puede apreciar en la salida estándar:

try01
Se puede apreciar que se produce una excepción del tipo NumberFormatException, por tanto se debería captura esa excepción para controlar el error.

        try
        {
            int num = Integer.valueOf(campoNúmero.getText());
        }
        catch(NumberFormatException e)
        {
            System.out.println("Error: El valor indicado no es un número");
        }
Si no se tiene claro el tipo de excepción que se quiere controlar, o se quiere controlar cualquier tipo de excepción que se pueda producir, se puede indicar en el catch la clase Exception que es genérica para todas las excepciones, tal como se ha indicado anteriormente.
        try
        {
            int num = Integer.valueOf(campoNúmero.getText());
        }
        catch(Exception e)
        {
            System.out.println("Se ha detectado un error");
        }
Si se desea mostrar qué tipo de error se ha producido se puede utilizar el método toString:

            System.out.println(e.toString);



No hay comentarios:

Publicar un comentario

 

Contador de visitas