10.7 CAPTURAS DE VARIAS EXCEPCIONES

 

Buenas, ¿qué hay? Las capturas de varias excepciones se producen cuando tenemos un método que puede lanzar excepciones de varios tipos.

Para ver esto vamos a trabajar con el siguiente archivo:

package er;

 

import javax.swing.JOptionPane;

 

public class Varias_Excepciones {

 

      public static void main(String[] args) {

           

            division();

 

      }

     

      static void division() {

           

            int num1=Integer.parseInt(JOptionPane.showInputDialog("Introduce el dividendo"));

           

            int num2=Integer.parseInt(JOptionPane.showInputDialog("Introduce el divisor"));

           

            System.out.println("El resultado es "+(num1/num2));

           

           

 

      }

 

}

Es una aplicación muy sencilla que realiza el cálculo de una división, si lo probamos, introducimos el dividendo:



Introducimos el divisor:



Nos da el resultado de la división:



Pero si en el dividendo introducimos un 9 y en el divisor un 0 en consola nos aparece el siguiente error:



Sin embargo, si en lugar de introducir un 0 introducimos texto ya sea cuando nos solicita el divisor o el dividendo nos da otro error:



Si vamos a la API de Java veremos que la clase ArithmeticException hereda de RuntimeException, es una excepción no controlada y no es necesario declarar la estructura try.. catch, al igual que la clase NumberFormatException.

La solución vendría declarando un try… catch en la llamada del método no es recomendable hacerlo así porque los tipos de excepción que dan heredan como ya se ha comentado en el párrafo anterior de RuntimeException no es un error controlado pero para que veáis la sintaxis más adelante veremos cómo hacerlo de otra forma.

Entonces en la llamada al método creamos el bloque try… catch:

try {

            division();

            }catch(Exception e) {

                 

                  System.out.println("Ha ocurrido un error");

            }

Si al ejecutar el programa introducimos un cero o texto el error que nos va a aparecer en consola es el siguiente:



No nos daría ningún detalle acerca del error, no sabes porque se ha producido. Si en lugar de introducir como parámetro en el catch la clase Exception introducimos la clase que se lanza al producirse un error:

            try {

            division();

            }catch(ArithmeticException  e) {

                 

                  System.out.println("Error. Estas dividiendo por 0");

            }

Creamos otro catch a continuación para la clase NumberFormatException:

            try {

            division();

            }catch(ArithmeticException  e) {

                 

                  System.out.println("Error. Estas dividiendo por 0");

            }catch(NumberFormatException e) {

                 

                  System.out.println("Error. Has introducido texto");

            }

 

Si probamos, vamos a introducir primero un 0:



Si volvemos a ejecutar el programa introduciendo texto:



Cuando hay varios catch o cuando queremos que sea el error más explícito se utilizan tres métodos:

·         getMessage()

·         getClass()

·         getName()

Vamos a probar el primer método de la siguiente forma:

            try {

            division();

            }catch(ArithmeticException  e) {

                 

                  System.out.println("Error. Estas dividiendo por 0");

            }catch(NumberFormatException e) {

                 

                  System.out.println("Error. Has introducido texto");

                 

                  System.out.println(e.getMessage());

            }

Si ejecutamos la aplicación, introducimos texto:



Lo que nos ha capturado este método es el texto que hemos introducido en el campo de texto.

Probamos los otros dos métodos:

            try {

            division();

            }catch(ArithmeticException  e) {

                 

                  System.out.println("Error. Estas dividiendo por 0");

            }catch(NumberFormatException e) {

                 

                  System.out.println("Error. Has introducido texto");

                 

                  //System.out.println(e.getMessage());

                 

                  System.out.println("Se ha generado un error de este tipo: "+e.getClass().getName());

            }

Y en la consola:



Te da el tipo de error.

Tenéis ejercicios para practicar las diferentes excepciones en el menú Ejercicios, os espero en el próximo post que será el último del bloque de las excepciones. Saludos!

10.6 CREACIÓN DE EXCEPCIONES PROPIAS << >> 10.8 CLÁUSULA FINALLY




No hay comentarios:

Publicar un comentario