Programming
T03-004-01 - Excepciones: captura
Enunciado
Para poder capturar excepciones, emplearemos la estructura de captura de excepciones
try-catch-finally.Básicamente, para capturar una excepción lo que haremos será declarar bloques de código donde es posible que ocurra una excepción. Esto lo haremos mediante un bloque
try(intentar). Si ocurre una excepción dentro de estos bloques, se lanza una excepción. Estas excepciones lanzadas se pueden capturar por medio de bloquescatch. Será dentro de este tipo de bloques donde se hará el manejo de las excepciones.Sintaxis:
try {
código que puede generar excepciones;
} catch (Tipo_excepcion_1 objeto_excepcion) {
Manejo de excepción de Tipo_excepcion_1;
} catch (Tipo_excepcion_2 objeto_excepcion) {
Manejo de excepción de Tipo_excepcion_2;
}
...
finally {
instrucciones que se ejecutan siempre
}En esta estructura, la parte
catchpuede repetirse tantas veces como excepciones diferentes se deseen capturar. La partefinallyes opcional y, si aparece, solo podrá hacerlo una sola vez.Cada
catchmaneja un tipo de excepción. Cuando se produce una excepción, se busca elcatchque posea el manejador de excepción adecuado, será el que utilice el mismo tipo de excepción que se ha producido. Esto puede causar problemas si no se tiene cuidado, ya que la clase Exception es la superclase de todas las demás. Por lo que si se produjo, por ejemplo, unaexcepciónde tipoAritmethicExceptiony el primercatchcaptura el tipo genéricoException, será esecatchel que se ejecute y no los demás.Por eso el último
catchdebe ser el que capture excepciones genéricas y los primeros deben ser los más específicos. Lógicamente si vamos a tratar a todas las excepciones (sean del tipo que sean) igual, entonces basta con un solocatchque capture objetosException.Ejemplo:
El siguiente programa en Java solicita al usuario la introducción de un número por teclado comprendido entre el 0 y el 100. Utilizando manejo de excepciones, controla la entrada de dicho número y vuelve a solicitarlo en caso de que ésta sea incorrecta.
/*
* Ejercicio resuelto sobre manejo de excepciones.
* El programa solicita que el usuario introduzca por teclado
* un número entre 0 y 100, debiendo gestionarse la entrada
* por medio de excepciones.
*/
import java.io.*;
public class ejercicio_resuelto_excepciones {
public static void main(String[] args){
int numero=-1;
int intentos=0;
String linea;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
do{
try{
System.out.print("Introduzca un número entre 0 y 100: ");
linea = teclado.readLine();
numero = Integer.parseInt(linea);
}catch(IOException e){
System.out.println("Error al leer del teclado.");
}catch(NumberFormatException e){
System.out.println("Debe introducir un número entre 0 y 100.");
}finally{
intentos++;
}
}while (numero < 0 || numero > 100);
System.out.println("El número introducido es: " + numero);
System.out.println("Número de intentos: " + intentos);
}
}Ejercicio:
En el ejemplo correspondiente al apartado Leer del teclado, se muestra la calificación en el módulo de Programación que introduce el usuario por teclado:
import java.util.Scanner;
public class LecturaTeclado {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int miCalificacion = 0;
System.out.println("Dime la nota que me corresponde:");
miCalificacion = sc.nextInt();
System.out.println("Mi nota en PROGRAMACION es: " + miCalificacion);
}
}Modifica el código anterior para capturar la excepción InputMismatchException en el caso de que el usuario introduzca un valor float.
Solución
import java.util.Scanner;
import java.util.InputMismatchException;
public class LecturaTeclado {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int miCalificacion = 0;
System.out.println("Dime la nota que me corresponde:");
try {
miCalificacion = sc.nextInt();
} catch (InputMismatchException ime) {
System.out.println("Debe introducir un numero entero:");
}
System.out.println("Mi nota en PROGRAMACION es: " + miCalificacion);
}
}
Input
10.5
20.5
Output
Dime la nota que me corresponde: Debe introducir un numero entero: Mi nota en PROGRAMACION es: 0
Dime la nota que me corresponde: Debe introducir un numero entero: Mi nota en PROGRAMACION es: 0

