Hola de nuevo, seguimos con las
excepciones. Vamos a ver como lanzar excepciones de forma manual utilizando la
cláusula throw. No confundir esta
cláusula con la cláusula throws. La
diferencia entre una y otra es que la cláusula throws la utilizamos en la declaración de un método para indicar
que ese método podría lanzar una excepción mientras que la cláusula throw la podemos utilizar en cualquier
punto del código para indicar que en ese punto concreto se lanza una excepción.
Para ver la cláusula throw lo vamos a hacer mediante un
ejemplo:
package er;
import
javax.swing.JOptionPane;
public class CompruebaMail {
public static void main(String[] args) {
String
el_mail=JOptionPane.showInputDialog("Introduce
mail");
examina_mail(el_mail);
}
static void examina_mail
(String mail) {
int arroba=0;
boolean punto=false;
for(int i=0; i<mail.length(); i++) {
if(mail.charAt(i)=='@') {
arroba++;
}
if(mail.charAt(i)=='.') {
punto=true;
}
}
if(arroba==1 && punto==true) {
System.out.println("Es
correcto");
}else {
System.out.println("La
dirección no es correcta");
}
}
}
Es una aplicación que solicita mediante una ventana de JOptionPane la dirección del mail si esta dirección contiene una arroba y un punto pues te indica que es correcto, sino, te indica que la dirección no es correcta. Probamos:
Al pulsar el botón como contiene un arroba y un punto pues te indica que es correcto:
Si contiene más de un arroba o no contiene un arroba o no tiene punto o tiene más de un punto te indica que es incorrecto:
Nos indica que la dirección es correcta:
Sin embargo, no es correcto. A partir
de aquí podemos hacer varias cosas, evaluar si tiene más de un arroba, si tiene
más de dos puntos, donde va ubicado el arroba y el punto, si tiene más de 3
caracteres, etc.
En este caso, vamos a hacer que lance
una excepción cuando tenga tres o menos caracteres.
Todo el trozo que evalúa la dirección mail es el siguiente:
Este trozo de código se va a ejecutar siempre y cuando la dirección mail tenga tres o más caracteres, por lo que antes del for creamos un condicional if: if(mail.length()<=3)
{
}
Si tiene 3 o menos caracteres se
ejecuta lo que hay dentro del if, es
decir, va a lanzar una excepción, ¿Qué
tipo de excepción? Hay muchos tipos de errores en Java, por ejemplo, IOException no se adapta al tipo de
error que nos va a dar ya que no accede a ficheros externos, el error se va a
producir porque el String es
demasiado corto. Puede ser que el tipo de error que nos da no se adapte a
ninguna de los tipos de clases de error que hay en la librería de Java en este
caso tendríamos que crear nuestras propias excepciones, esto lo veremos en el post
siguiente, en este, caso podemos utilizar un tipo de error de Java, por
ejemplo, ArrayIndexOutOfBoundsException
Lo primero que tenemos que hacer es
instanciar esta clase:
if(mail.length()<=3)
{
ArrayIndexOutOfBoundsException
e = new
ArrayIndexOutOfBoundsException();
}
A esta clase le hemos dado el nombre
de e, ahora lanzamos esta clase:
if(mail.length()<=3)
{
ArrayIndexOutOfBoundsException
e = new
ArrayIndexOutOfBoundsException();
throw e;
}
Si ejecutamos la aplicación
introducimos un mail con menos de tres caracteres nos va a lanzar una excepción
de tipo ArrayIndexOutOfBoundsException
aunque no tenga nada que ver el error con esta clase. Nos faltaría indicar el else:
if(mail.length()<=3)
{
ArrayIndexOutOfBoundsException
e = new
ArrayIndexOutOfBoundsException();
throw e;
}else
{
for(int i=0; i<mail.length(); i++) {
if(mail.charAt(i)=='@') {
arroba++;
}
if(mail.charAt(i)=='.') {
punto=true;
}
}
if(arroba==1 && punto==true) {
System.out.println("Es
correcto");
}else {
System.out.println("La
dirección no es correcta");
}
}
}
Si probamos la aplicación:
Nos va a lanzar la excepción:
No es necesario instanciar la clase y
luego crear el throw esto se hace
directamente en la cláusula throw:
if(mail.length()<=3)
{
//ArrayIndexOutOfBoundsException
e = new ArrayIndexOutOfBoundsException();
throw new
ArrayIndexOutOfBoundsException();
}
Si dentro de un método se programa
para que lance una excepción cuando haya un error en el programa podemos
indicarle al método que se va a lanzar una excepción y esto lo hacemos con la
cláusula throws.
static void examina_mail
(String mail) throws ArrayIndexOutOfBoundsException {
Con esto conseguimos que para el resto
de programadores vean que este método puede lanzar una excepción y que
convendría capturar el error. Si no capturamos el error siempre nos va a salir
la excepción en consola. Para ello podemos indicarle que es un tipo de error IOException, error no controlado
static void examina_mail
(String mail) throws IOException {
int arroba=0;
boolean punto=false;
if(mail.length()<=3)
{
//ArrayIndexOutOfBoundsException
e = new ArrayIndexOutOfBoundsException();
throw new IOException();
}
De esta forma estamos obligados a declarar la estructura try… catch ¿dónde escribimos esta estructura? Al llamar al método, si vemos en el código cuando llamamos al método hay un error:
Lo crearíamos de la siguiente forma:
try {
examina_mail(el_mail);
}catch(IOException e) {
System.out.println("La
dirección mail no es correcta");
}
}
Si probamos ahora:
Al pulsar el botón de Aceptar ya no se sale el error de excepción, sino, lo que hay dentro del System.out que le hemos indicando dentro del bloque catch:
Bueno pues esto ha sido todo, seguimos
viendo las excepciones en los siguientes posts espero que se os haga ameno,
intento hacerlo todo lo práctico posible, ir paso a paso, pero si veis que algo
no está claro o que me he saltado algo que necesita explicación no dudéis en indicármelo.
Hasta pronto!
10.4 LANZAMIENTO DE EXCEPCIONES << >> 10.6 CREACIÓNDE EXCEPCIONES PROPIAS
No hay comentarios:
Publicar un comentario