Buenas,
En este tema veremos un par de métodos de utilidad que podemos usar con las excepciones capturadas ademas de un ejemplo mas complejo y funcional.
Métodos utiles
.printStackTrace()
Imprime el nombre de excepción, donde se ha generado y todos los lugares donde ha ido escalando:
java.util.InputMismatchException // Nombre de la excepción.
at java.base/java.util.Scanner.throwFor(Scanner.java:947) // Salto en la linea 947 de la clase Scanner, en el metodo .throwFor().
at java.base/java.util.Scanner.next(Scanner.java:1602) // Escalo a la linea 1602 de la clase Scanner, en el metodo .next().
at java.base/java.util.Scanner.nextInt(Scanner.java:2267) // Escalo a la linea 2267 de la clase Scanner, en el metodo .nextInt().
at java.base/java.util.Scanner.nextInt(Scanner.java:2221) // Escalo a la linea 2221 de la clase Scanner, en el metodo .nextInt().
at MiClase.main(MiClase.java:23) // Escalo a la linea 23 de la clase MiClase, en el metodo .main().
.getMessage()
Si a la hora de lanzar la excepción esta se lanza con a un mensaje, este metodo lo devolverá en forma de String.
Ejemplo
Como la posición 10 no existe saltara una excepción.
try
{
int[] numeros = {1, 2, 3, 4, 5};
int miNumero = numeros[10];
} catch (Exception e)
{
System.out.println(e.getMessage());
}
Output
Index 10 out of bounds for length 5
También recomiendo echar un ojo a la API oficial de Java para ver otros métodos útiles, en su mayoría de la clase Throwable.
Ejemplo
Esta clase de ejemplo simula una encuesta, al ser la entrada de información, sobre todo la de un usuario, un punto debil en cualquier programa, es mas que recomendable tratarla de alguna forma, aun cuando es simplemente enseñando un mensaje de error y saliendo adecuadamente del programa como es en este caso.
Encuesta.java
import java.util.Scanner;
public class Encuesta
{
// Datos que se recogerán en la encuesta.
private static String nombre, apellido, nomMadre, nomPadre;
private static String[] nomHermanos;
private static int edad, nHermanos;
public static void main(String[] args)
{
// Llamar al metodo pedirInfo() y controlar las posibles excepciones.
try
{
pedirInfo();
}
catch (Exception e)
{
System.err.println("Algo ha salido mal en la encuesta: "); // System.err.println es igual que System.out.println solo que imprime en formato de error.
e.printStackTrace();
System.err.println("Saliendo...");
return; // Si salta una excepcion en la encuesta se termina el programa.
}
printInfo(); // Imprimir el los datos recolectados usando el metodo printInfo().
}
/**
* Pide al usuario algunos datos y los almacena en variables estáticas.
* @throws Exception
*/
public static void pedirInfo() throws Exception
{
Scanner entrada = new Scanner(System.in);
System.out.println("-----------------------------------------");
System.out.println(" ENCUESTA:");
System.out.print(" + Nombre: ");
nombre = entrada.nextLine();
System.out.print(" + Apellido: ");
apellido = entrada.nextLine();
System.out.print(" + Edad: ");
edad = entrada.nextInt();
entrada.nextLine(); // Limpiar buffer de Scanner.
System.out.print(" + Nombre del padre: ");
nomPadre = entrada.nextLine();
System.out.print(" + Nombre de la madre: ");
nomMadre = entrada.nextLine();
System.out.print(" + Numero de hermanos: ");
nHermanos = entrada.nextInt();
entrada.nextLine(); // Limpiar buffer de Scanner.
nomHermanos = new String[nHermanos];
for (int i = 0; i < nHermanos; i++)
{
System.out.print(" + Nombre del herman@ " + (i + 1) + ": ");
nomHermanos[i] = entrada.nextLine();
}
entrada.close();
}
/**
* Imprime los datos almacenados en variables estáticas.
*/
public static void printInfo()
{
System.out.println("-----------------------------------------");
System.out.println(" RESULTADO:");
System.out.println(" > Nombre: " + nombre + " " + apellido + ".");
System.out.println(" > Padres: " + nomPadre + " y " + nomMadre + ".");
System.out.println(" > Edad: " + edad + ".");
if (nomHermanos.length > 0)
{
System.out.println(" > Herman@s: ");
for(String hermano : nomHermanos)
{
System.out.println(" - " + hermano + ".");
}
}
}
}
Output sin errores
-----------------------------------------
ENCUESTA:
+ Nombre: Samuel
+ Apellido: de Luque
+ Edad: 36
+ Nombre del padre: Juan
+ Nombre de la madre: María
+ Numero de hermanos: 2
+ Nombre del herman@ 1: Roberto
+ Nombre del herman@ 2: Paula
-----------------------------------------
RESULTADO:
> Nombre: Samuel de Luque.
> Padres: Juan y María.
> Edad: 36.
> Herman@s:
- Roberto.
- Paula.
Output con errores
-----------------------------------------
ENCUESTA:
+ Nombre: Samuel
+ Apellido: de Luque
+ Edad: Treinta y dos
Algo ha salido mal en la encuesta:
java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:947)
at java.base/java.util.Scanner.next(Scanner.java:1602)
at java.base/java.util.Scanner.nextInt(Scanner.java:2267)
at java.base/java.util.Scanner.nextInt(Scanner.java:2221)
at Encuesta.pedirInfo(Encuesta.java:41)
at Encuesta.main(Encuesta.java:13)
Saliendo...
En el siguiente tema veremos como crear y lanzar excepciones propias y ajenas usando throw.