Closed tomasserravento closed 3 years ago
El problema con eso, es que el ejemplo funcionará con una sola de las excepciones. ¿Se les ocurre un ejemplo puntual?
Profe, como esta? Si tiene razon en que el ejemplo que dimos no es el mejor. Me parece importante agregar esto porque no mucha gente sabe que puede hacer varios catchs en un try y aunque no se use siempre a veces puede ser de mucha utilidad.
Aca le tengo une ejemplo copado que encontramos en GeeksForGeeks https://www.geeksforgeeks.org/multicatch-in-java/
Basicamente le pide al usuario que ingrese por teclado un numero. Y podes tener una excepcion si el numero es 0 (por el tema de la division) o si ingresa un string.
public static void main(String args[])
{
Scanner scn = new Scanner(System.in);
try
{
int n = Integer.parseInt(scn.nextLine());
if (99%n == 0)
System.out.println(n + " is a factor of 99");
}
catch (ArithmeticException ex)
{
System.out.println("Error: no se puede dividir por cero.");
}
catch (NumberFormatException ex)
{
System.out.println("Error: debe ingresar un numero entero.");
}
}
Si no tambien tengo un caso personal que uso yo en un programa para evitar que lo pirateen. Basicamente es un pequeño software de licencia donde si el numero de licencia aparece en una URL significa que el programa no debe funcionar. Basicamente es una blacklist.
Para que me sirve el multicatch? Principalmente por el IOException dado que a veces hay timeouts. Y tambien por NoClassDefFoundError debido a que algunas personas lograron evadir este sistema removiendole al jar acceso a clases de IO para que no pueda hacer la conexion a la URL.
try {
this.selfdefense = false;
bool = true;
URLConnection conn = new URL("https://miurl.com").openConnection();
conn.setConnectTimeout(3500);
conn.setReadTimeout(7000);
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
// Codigo que se necesite en la conexion
} catch (IOException ex) {
if (ex.getMessage() != null && (ex.getMessage().contains("Server returned HTTP response code: 522 for URL:") || ex.getMessage().contains("connect timed out") || ex.getMessage().equals("Connection timed out: connect"))) {
System.out.println("En este caso significa que no se pudo conectar a la URL porque esta caida o que hubo un timeout por una larga espera a la conexion.");
} else
System.out.println("Alguna otra excepcion de IO");
// No bloqueo el uso del programa. Podria poner un codigo para probar mas tarde
} catch (NoClassDefFoundError ex) {
System.out.println("Este error se va a dar en este caso si alguien remueve alguna clase del jar para evitar acceso a la URL.");
// Bloqueo el uso del programa
} catch (Exception | Error ex) {
System.out.println("Alguna otra excepcion o error.");
ex.printStackTrace();
// No bloqueo el uso del programa
}
Referido en otro issue
Agregar mas ejemplos sobre excepciones donde un try tenga distintos catch de distintas excepciones.
https://github.com/programacion-avanzada/workspace/tree/master/basicas-excepciones
Ejemplos: https://www.javatpoint.com/multiple-catch-block-in-java