Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Java captura múltiples excepciones

En este tutorial, aprenderemos a manejar múltiples excepciones en Java con la ayuda de ejemplos.
Antes de Java 7, teníamos que escribir múltiples códigos de manejo de excepciones para diferentes tipos de excepciones, incluso si había redundancia de código.
Pongamos un ejemplo.

Ejemplo 1: múltiples bloques de captura

  1. class Main {
  2. public static void main(String[] args) {
  3. try {
  4. int array[] = new int[10];
  5. array[10] = 30 / 0;
  6. } catch (ArithmeticException e) {
  7. System.out.println(e.getMessage());
  8. } catch (ArrayIndexOutOfBoundsException e) {
  9. System.out.println(e.getMessage());
  10. }
  11. }
  12. }
Salida
/ por cero
En este ejemplo, pueden ocurrir dos excepciones:
  • ArithmeticException porque estamos tratando de dividir un número por 0.
  • ArrayIndexOutOfBoundsException porque hemos declarado una nueva matriz entera con límites de matriz de 0 a 9 y estamos tratando de asignar un valor al índice 10.
Estamos imprimiendo el mensaje de excepción en ambos catchbloques, es decir, código duplicado.
La asociatividad del operador de asignación =es de derecha a izquierda, por lo que ArithmeticExceptionse arroja primero con el mensaje/ por cero.

Manejar múltiples excepciones en un bloque catch

En Java SE 7 y versiones posteriores, ahora podemos detectar más de un tipo de excepción en un solo catchbloque.
Cada tipo de excepción que puede manejar el catchbloque se separa mediante una barra o tubería vertical |.
Su sintaxis es:
  1. try {
  2. // code
  3. } catch (ExceptionType1 | Exceptiontype2 ex) {
  4. // catch block
  5. }

Ejemplo 2: bloque de captura múltiple

  1. class Main {
  2. public static void main(String[] args) {
  3. try {
  4. int array[] = new int[10];
  5. array[10] = 30 / 0;
  6. } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
  7. System.out.println(e.getMessage());
  8. }
  9. }
  10. }
Salida
/ por cero
Capturar múltiples excepciones en un solo catchbloque reduce la duplicación de código y aumenta la eficiencia.
El catchcódigo de bytes generado al compilar este programa será más pequeño que el programa que tiene múltiples bloques ya que no hay redundancia de código.
Nota: Si un catchbloque maneja múltiples excepciones, el parámetro catch es implícitamente finalEsto significa que no podemos asignar ningún valor para capturar parámetros.

Captura de la excepción base

Al detectar varias excepciones en un solo catchbloque, la regla se generaliza a especializada.
Esto significa que si hay una jerarquía de excepciones en el catchbloque, podemos capturar la excepción base solo en lugar de detectar varias excepciones especializadas.
Pongamos un ejemplo.

Ejemplo 3: solo clase de excepción base de captura

  1. class Main {
  2. public static void main(String[] args) {
  3. try {
  4. int array[] = new int[10];
  5. array[10] = 30 / 0;
  6. } catch (Exception e) {
  7. System.out.println(e.getMessage());
  8. }
  9. }
  10. }
Salida
/ por cero
Sabemos que todas las clases de excepción son subclases de la Exceptionclase. Entonces, en lugar de detectar múltiples excepciones especializadas, simplemente podemos capturar la Exceptionclase.

Si la clase de excepción base ya se ha especificado en el catchbloque, no use clases de excepción secundarias en el mismo catchbloque. De lo contrario, obtendremos un error de compilación.
Pongamos un ejemplo.

Ejemplo 4: captura de clases de excepción base y secundaria

  1. class Main {
  2. public static void main(String[] args) {
  3. try {
  4. int array[] = new int[10];
  5. array[10] = 30 / 0;
  6. } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) {
  7. System.out.println(e.getMessage());
  8. }
  9. }
  10. }
Salida
Main.java:6: error: las alternativas en una declaración de captura múltiple no pueden relacionarse mediante subclases
En este ejemplo, ArithmeticExceptionArrayIndexOutOfBoundsExceptionson ambas subclases de la Exceptionclase. Entonces, tenemos un error de compilación.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas