miércoles, 1 de julio de 2015

Excepciones

En la programación existen varios tipos de errores que pueden darse en tiempo de ejecución, de compilación o de codificación.

Un error en tiempo de ejecución puede deberse a varias razones, una de ellas es por ejemplo cuando se requiere el ingreso de números y el usuario ingresa caracteres, lo que produce un cierre prematuro y atropellado de la aplicación que suele ser bastante molesto; por esta razón, en java es posible manejar excepciones que eviten un cierre abrupto del programa en ejecución en caso de un error.

MANEJO DE EXCEPCIONES

Durante la codificación, es importante que el programador ejecute la aplicación imaginando que es un usuario totalmente inexperto en el manejo de la aplicación, sólo así el programador logrará identificar la mayoría si no todas las posibles causas que pueden provocar que la ejecución del programa termine sin éxito.

La sintaxis para tratar una excepción es:

try{
....
sentencias
....
}catch(TipoExcepcion nombreExcepcion){ 
...
instrucciones
...
}finally{
...
sentencias
...}

El bloque catch atrapa el error que podría aparecer eventualmente durante la ejecución de las sentencias dentro del bloque try. Finally, encierra instrucciones que se ejecutarán siempre, se produzca o no el error.

Para identificar la parte del código en la que se podría producir la excepción se usa la palabra reservada throws que permite lanzar la excepción:

static void nombreExcepcion(TipoArgumentos argumentos)throws TipoExcepcion{
throw new TipoExcepcion("mensaje");
}


EJEMPLO DE EXCEPCIONES COMUNES A TENER EN CUENTA:

  • DIVISIÓN PARA CERO:
public static void main(String args[]) {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.printf("Ingrese el numerador: ");
            Integer numero1 = Integer.parseInt(entrada.readLine());
            System.out.printf("Ingrese el denominador: ");
            Integer numero2 = Integer.parseInt(entrada.readLine());
            System.out.println("Los números ingresados son: " + numero1 + " y " + numero2);
            System.out.println("El resultado de la división es: " + numero1 / numero2);
        } catch (ArithmeticException e) {
            System.out.println("No se puede dividir para cero!");
        } finally {
            System.out.printf("Esto siempre se ejecuta\nAdiós\n");
        }
    }
  • INGRESO ERRÓNEO DE TIPO DE DATOS: Por ejemplo, se pide ingresar números pero el usuario ingresa caracteres:
public static void main(String args[]) throws IOException {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.printf("Ingrese el numerador: ");
            Integer numero1 = Integer.parseInt(entrada.readLine());
            System.out.printf("Ingrese el denominador: ");
            Integer numero2 = Integer.parseInt(entrada.readLine());
            System.out.println("Los números ingresados son: " + numero1 + " y " + numero2);
            System.out.println("El resultado de la división es: " + numero1 / numero2);
            } catch (NumberFormatException e) {
            System.out.println("Debes ingresar únicamente números!");
            e.printStackTrace(); //Imprime la información de la excepción
        } finally {
            System.out.printf("Esto siempre se ejecuta\nAdiós\n");
        }
    }

  • Si no se necesita imprimir un mensaje personalizado acerca del error producido, entonces se puede usar la siguiente instrucción:
public static void main(String args[]) throws IOException {
        BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
        System.out.printf("Ingrese la edad: ");
        try {
            Integer edad = Integer.parseInt(entrada.readLine());
            System.out.println("La edad ingresada es: " + edad);
            } catch (IOException ex) {
            Logger.getLogger(Aplicacion.class.getName()).log(Level.SEVERE, null, ex);
        }
 }

CREACIÓN DE EXCEPCIONES


Si el programador necesita lanzar una excepción que no está dentro del lenguaje java, entonces puede crear tantas excepciones como crea necesarias, para lograrlo primero deberá crear una clase con el nombre de la excepción a ser lanzada, dicha clase deberá heredar de la clase Exception, en esta clase deberán ir las siguientes instrucciones:

public class NombreExcepcion extends Exception {
    public NombreExcepcion(String mensaje) {
        super(mensaje);
    }
}

Para poder usar la excepción, se debe hacer uso de la palabra throws en la sentencia donde se podría producir la excepción:

throw new NombreExcepcion("mensaje para mostrar");

Así por ejemplo:

Si se solicita el ingreso del intervalo de horas que se demorará una actividad, el primer valor deberá ser menor que el segundo:

public class RangoException extends Exception {

    public RangoException(String mensaje) {
        super(mensaje);
    }
}

public void main(String args[]) throws RangoException {
        if (horaMin > horaMax) {
            throw new RangoException("Rango ingresado incorrecto");
        }
}


No hay comentarios:

Publicar un comentario