Y llegamos al último post del bloque
de las Excepciones, en este post vamos a ver la cláusula que nos queda por ver,
Finally.
Para ver esta cláusula lo vamos a
hacer mediante un ejemplo cuyo código es el siguiente:
package er;
import
java.util.Scanner;
import
javax.swing.JOptionPane;
public class Areas_Peso {
public static void main(String[] args) {
Scanner
sc=new Scanner(System.in);
System.out.println("Elige
una opción \n1: Cuadrado \n2: Rectángulo \n3: Triángulo \n4: Círculo");
figura=sc.nextInt();
switch(figura) {
case 1:
int lado=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el lado"));
System.out.println(Math.pow(lado, 2));
break;
case 2:
int base=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el base"));
int altura=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el altura"));
System.out.println("El área
del rectángulo es: "+base*altura);
break;
case 3:
base=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el base"));
altura=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el altura"));
System.out.println("El área
del tríangulo es: "+(base*altura)/2);
break;
case 4:
int radio=Integer.parseInt(JOptionPane.showInputDialog("Introduce
el radio"));
System.out.print("El área
del circulo es: ");
System.out.println(Math.PI*(Math.pow(radio, 2)));
break;
default:
System.out.println("La
opción no es correcta");
}
//............................................
int altura=Integer.parseInt(JOptionPane.showInputDialog("Introduce
tu altura en centimetros"));
System.out.println("Si eres
hombre tu peso ideal es: "+(altura-110)+" kg.");
System.out.println("Si eres
mujer tu peso ideal es: "+(altura-120)+" kg.");
}
static int figura;
}
Si probamos el programa en la consola nos aparece que seleccionemos una opción vamos a indicarle, por ejemplo, la opción 2:
Introducimos el área del rectángulo:
Introducimos la altura:
Introducimos nuestra altura en centímetros:
El resultado en consola:
El programa funciona correctamente, si nos fijamos en el código cuando utilizamos la clase Scanner siempre nos aparece una advertencia:
Si nos situamos con el ratón sobre esta advertencia:
No es un error es una recomendación y
quiere decir que sc no es cerrada
nunca cuando creamos una instancia perteneciente a la clase Scanner abrimos una conexión externa
con la consola de Eclipse para poder introducir información dentro del programa
con lo cual este programa deja una conexión abierta con la consola y no la
cierra nunca, la recomendación es que se cierre esa conexión ya que consume
muchos recursos al dejarla abierta.
¿Dónde se debe cerrar? Si vemos la clase Scanner la estamos utilizando hasta la línea de código 15:
En esta línea estamos almacenando el próximo entero que introduzcamos por consola una vez que hemos hecho esta operación ya no vamos a necesitar más la consola para introducir datos por lo que a continuación de la línea de código 15 cerraríamos la conexión:
Vemos que con esto la advertencia ya
se ha eliminado de la línea de código 11.
Sin embargo, esta aplicación tiene dos partes: una que halla el área de las figuras y otra que halla el peso ideal. Si ejecutamos la aplicación introducimos en consola una opción, por ejemplo, la opción 3:
En lugar de introducir un número entero introducimos texto:
El programa se cae por completo no se ejecuta ni la primera parte ni la segunda:
En este caso si vemos que falla al introducir la opción por lo menos que se ejecute la segunda parte de la aplicación la de hallar el peso ideal. Para solucionarlo debemos saber dónde se produce el error, el error se produce al introducir la opción en esta línea de código:
Por lo que aquí hay que crear un
bloque try… catch:
try {
figura=sc.nextInt();
sc.close();
}catch(Exception e) {
System.out.println("No has introducido
una opción válida");
}
Dentro del try también estaría el cierre de la conexión a la consola. Si probamos de nuevo:
Se ejecuta lo que hay dentro del catch y también la estructura default del switch no nos va a hallar las áreas de las figuras pero la segunda parte sí que se va a ejecutar:
Vemos el resultado en consola:
Como el try no se ha ejecutado la conexión de la instancia Scanner se ha quedado abierta para
solucionarlo se utiliza la cláusula finally
que siempre se va a ejecutar haya errores o no:
try {
figura=sc.nextInt();
}catch(Exception e) {
System.out.println("No has
introducido una opción válida");
}finally {
sc.close();
}
De esta manera si se produce un error
la conexión a la consola siempre se va a cerrar.
Con este post doy por finalizado el
bloque de las Excepciones, todavía queda mucho por ver en Java, espero que
continuéis siguiéndome, si tenéis dudas podéis hacérmelo llegar a través de los
comentarios del blog. Hasta pronto!
10.7 CAPTURAS DE VARIAS EXCEPCIONES <<
>> 11.1 INTRODUCCIÓN DEBUGGING
No hay comentarios:
Publicar un comentario