10.4 LANZAMIENTO DE EXCEPCIONES

 

¿Qué tal? continuamos con el ejemplo Entrada_datos.java hemos lanzado una excepción dentro del método pedirDatos() mediante la cláusula Throws:



Sin embargo, esto no tiene mucho sentido, si creamos un método que lanza una excepción lo más lógico que la excepción la captures desde fuera del método, por lo que el try.. catch no deberá estar dentro del método, comentamos las líneas del try y del catch:



Vamos a ver dónde tendría más sentido declarar esta estructura, tendría más sentido a la hora de llamar al método



Lo haríamos de la siguiente forma:

try {

                 

                  pedirDatos();

                  }catch(InputMismatchException e) {

                       

                        System.out.println("No has introducido correctamente la edad");

                  }

El tipo de error InputMismatchException si vamos a la API de Java vemos que viene de la clase RuntimeException por lo que en este caso no hubiera sido necesario haber declarado la cláusula try… catch, son errores no comprobados, errores por parte del programador. Si elimináramos la cláusula try.. catch:



Ejecutamos de nuevo el programa, si todo va bien, se va a ejecutar de forma correcta:



Pero si introducimos la edad con texto nos va a continuar dando el error:



Si el error InputMismatchException en lugar de heredar de RuntimeException heredará de IOException sí que estaríamos obligados a declarar la cláusula try… catch. Si cambiamos el método por un IOException

static void pedirDatos() throws IOException{

En este caso nos obliga a declarar el try.. catch:

try {

                 

                  pedirDatos();

                 

                  }catch(IOException e) {

                       

                        System.out.println("No has introducido correctamente la edad");

                  }

Dentro del catch el tipo de error sería IOException.

Si lo dejáramos así el programa funcionaría, está bien construido, no hay errores, sin embargo, cuando se lance una excepción el error que da no es de tipo IOException, este tipo de errores es cuando estamos intentando acceder a ficheros externos. Como el tipo de error que da es de tipo InputMismatchException no tienen nada que ver con el error que se está intentando capturar en el catch que es de tipo IOException. Si ejecutamos el programa va a seguir mostrando el error porque InputMismatchException no es de tipo IOException:



Para solucionar esto tanto las excepciones no comprobadas como las excepciones comprobadas heredan de la clase Exception por lo que en el catch en vez de indicar que capture un error de tipo IOException que capture un error de tipo Exception, más generalizado:

}catch(Exception e) {

Al volver a ejecutar el programa comprobamos que ya no muestra ningún error:



Os espero en el siguiente post, con cualquier duda me podéis enviar un mail a amizba@gmail.com o a través de los comentarios del blog. Saludos!

10.3 THROWS / TRY / CATCH II << >> 10.5 CLÁUSULA THROW




No hay comentarios:

Publicar un comentario