¿Qué tal? ¿Cómo van las excepciones?
Espero que lo tengáis claro, ya sabéis que ante cualquier duda me lo podéis
hacer llegar a través de los comentarios del blog o enviándome un mail a amizba@gmail.com.
En este post vamos a ver cómo crear nuestras propias excepciones y cómo surge la necesidad de crear nuestras propias excepciones. Vamos a seguir trabajando con la práctica del post anterior, recordamos que si le indicábamos un mail de 3 o menos caracteres se lanzaba una excepción está excepción la pusimos como tipo IOException:
De forma que nos obligaba a declarar la estructura try… catch:
Pero también lo hicimos con la clase ArrayIndexOutOfBoundsException que al
heredar de la clase RuntimeException no
era necesario declarar la estructura try…
catch.
Tanto con IOException como ArrayIndexOutOfBoundsException
el programa funcionaba correctamente, sin embargo, ninguna de las dos se adapta
al error que nos da si introducimos un mail incorrecto.
IOException se utiliza para ficheros externos,
por ejemplo, un programa Java se encarga de leer ficheros de texto y se supone
que esos ficheros en su interior tienen que tener 10 líneas de texto uno de
esos ficheros en lugar de tener 10 líneas tiene 3 líneas de texto ahí se
produce una excepción de tipo IOException.
ArrayIndexOutOfBoundsException se utiliza cuando se trabajan con
arrays y se produce cuando intentamos acceder a una posición de un array que no
existe.
En la API de Java no existe ninguna
clase que se adapte al error que da nuestra aplicación de ahí la necesidad de
crear nuestras propias excepciones.
Para crear nuestras propias
excepciones hay que crear una clase que herede de la clase Exception, IOException o
de RuntimeException. De las dos
primeras estamos obligados a declarar un bloque try… catch y de la tercera clase no estamos obligados ya que es un
error no controlado.
Lo primero que vamos a hacer es comentar las líneas del bloque try… catch:
Eliminamos el throws Exception del método:
static void examina_mail
(String mail) throws IOException
Y la instancia del IOException del if, vamos a dejar en
blanco lo que hay dentro del if:
if(mail.length()<=3)
{
//ArrayIndexOutOfBoundsException
e = new ArrayIndexOutOfBoundsException();
throw
new IOException();
Al final del código creamos nuestra
propia clase que hereda de Exception:
class longitud_mail
extends Exception {
}
Este tipo de clases se recomienda que
tengan dos constructores, el constructor por defecto sin parámetros y otro
constructor que admita un parámetro de tipo String.
class longitud_mail
extends Exception {
public longitud_mail()
{
}
public longitud_mail(String
msj) {
}
}
Dentro del segundo constructor:
class longitud_mail
extends Exception {
public longitud_mail()
{
}
public
longitud_mail(String msj) {
super(msj);
}
}
Estamos llamando al constructor padre
o el constructor de la clase Exception
y le estamos pasando a ese constructor como parámetro lo que hay almacenado
dentro de msj.
Ahora tenemos que ir al método examina_mail indicarle que lanza una
excepción de tipo longitud_mail, es
decir, de la clase que acabamos de crear.
static void examina_mail
(String mail) throws longitud_mail
Le tenemos que indicar donde lanza la
excepción y es cuando indicamos que la longitud del mail es de 3 o menos
caracteres así que dentro del if:
if(mail.length()<=3)
{
//ArrayIndexOutOfBoundsException
e = new ArrayIndexOutOfBoundsException();
throw new
longitud_mail();
}
Lo que hace esta instrucción es llamar
al constructor de la clase longitud_mail
esta clase tienen dos constructores podemos utilizar el constructor por defecto
o bien el constructor por parámetro, si le pasamos este último podemos
indicarle un mensaje personalizado:
throw new longitud_mail("El mail no es correcto");
Si observamos el código en la llamada al método hay un error:
Ya que estamos obligados a declarar el
bloque try… catch por lo que
desbloqueamos las líneas comentadas en el catch
el error sería de tipo Exception en
lugar de IOException:
try {
examina_mail(el_mail);
}catch(Exception e) {
System.out.println("La
dirección mail no es correcta");
}
Podríamos prescindir del mensaje de la
línea de código donde lanza el error:
throw new longitud_mail("El mail no es correcto");
Probamos la aplicación indicando un mail de tres caracteres:
Al pulsar el botón Aceptar nos da el error de la excepción que hemos creado:
Imaginad que fuera un código más
complejo y fuera otro programador diferente al que ha desarrollado la
aplicación este error no le da muchas pistas para ver donde se ha equivocado en
el mail. Para que nos dé una pista y nos dé una excepción utilizamos printStackTrace() de la siguiente
forma:
catch(Exception e) {
System.out.println("La
dirección mail no es correcta");
e.printStackTrace();
}
Y dentro del condicional if en la
línea de código donde esta throw
podemos indicarle otro mensaje:
throw new longitud_mail("Has introducido un mail de 3 o menos carácteres");
Si probamos de nuevo:
Al pulsar Aceptar:
Nos muestra el error que hay dentro
del bloque catch y también una
excepción de tipo longitud_mail y
nos da una descripción del mismo.
Y eso ha sido todo, os espero en el
próximo post. Saludos!
10.5 CLÁUSULA THROW << >>
10.7 CAPTURAS DE VARIAS EXCEPCIONES
No hay comentarios:
Publicar un comentario