¿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