ads
Mostrando entradas con la etiqueta Excepciones. Mostrar todas las entradas

Prácticas con excepciones  

Posted by Danny in ,

Crear el fichero Try1.java

Agregar el siguiente código:

public class Try1

{

public static void main(String arg[])

{

int [] array = new int[20];

array[-3] = 24;

}

}

Como podremos comprobar al ejecutar se generará el siguiente error:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException

at Try1.main(Try1.java:6)

Que indica que se ha generado una excepción del tipo java.lang.ArrayIndexOutOfBoundsException en la función Try1.main, dentro del fichero Try1.java y en la línea 6 del código. Esta excepción en particular, se lanza cuando intentamos acceder a una posición de un array y no existe dicha posición.


Vamos a gestionar esta interrupción mediante un bloque try/catch, el fichero crear es Try2.java, con el siguiente código:

public class Try2

{

public static void main(String arg[])

{

int [] array = new int[20];

try

{

array[-3] = 24;

}

catch(ArrayIndexOutOfBoundsException excepcion)

{

System.out.println(" Error de índice en un array");

}

}

}



Intentemos provocar también un error de tipo división por cero y pongamos un catch específico para dicho error (fichero Try3.java):

public class Try3

{

public static void main(String arg[])

{

int [] array = new int[20];

try

{

// array[-3] = 24;

int b = 0;

int a = 23/b;

}

catch(ArrayIndexOutOfBoundsException excepcion)

{

System.out.println(" Error de índice en un array");

}

catch(ArithmeticException excepcion)

{

System.out.println(" Error de índice en un array");

}

}

}

Podemos comprobar que se ejecuta el catch correspondiente al tipo de error generado. La línea que lanza el error de índice la hemos comentado para que no lo genere y podamos generar el error de división por cero.

Los tipos de error que se generan, son todos ellos clases, que heredan de la clase java.lang.Exception, que a su vez hereda de java.lang.Throwable, por lo tanto podríamos crear nuestros propios errores personalizados. Al igual que podríamos tener un solo catch que capture todos los errores, independientemente del tipo del error.


Excepciones  

Posted by Danny in

Excepcion es, o sencillamente problemas. En la programación siempre se producen errores, más o menos graves, pero que hay que gestionar y tratar correctamente. Por ello en java disponemos de un mecanismo consistente en el uso de bloques try/catch/finally . La técnica básica consiste en colocar las instrucciones que podrían provocar problemas dentro de un bloque try, y colocar a continuación uno o más bloques catch, de tal forma que si se provoca un error de un determinado tipo, lo que haremos será saltar al bloque catch capaz de gestionar ese tipo de error específico. El bloque catch contendrá el codigo necesario para gestionar ese tipo específico de error. Suponiendo que no se hubiesen provocado errores en el bloque try, nunca se ejecutarían los bloques catch.

Veamos ahora la estructura del bloque try/catch/finally:

try

{

//Código que puede provocar errores

}

catch(Tipo1 var1)

{

//Gestión del error var1, de tipo Tipo1

}

[ ...

catch(TipoN varN)

{

//Gestión del error varN, de tipo TipoN

} ]

[

finally

{

//Código de finally

}

]

Como podemos ver es obligatorio que exista la zona try, o zona de pruebas, donde pondremos las instrucciones problemáticas. Después vienen una o más zonas catch, cada una especializada en un tipo de error o excepción. Por último está la zona finally, encargada de tener un código que se ejecutará siempre, independientemente de si se produjeron o no errores.

Se puede apreciar que cada catch se parece a una función en la cuál sólo recibimos un objeto de un determinado tipo, precisamente el tipo del error. Es decir sólo se llamará al catch cuyo argumento sea coincidente en tipo con el tipo del error generado.