Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Dominando el manejo multi‑excepción en Java

Dominando el manejo multi‑excepción en Java

Descubre cómo atrapar varias excepciones con un solo bloque catch, simplifica tu código y evita trampas comunes.

Antes de Java 7, los desarrolladores tenían que escribir bloques catch separados para cada tipo de excepción, incluso cuando la lógica de manejo era idéntica.

Considera el siguiente escenario.

Ejemplo 1: Bloques catch separados

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Salida

/ by zero

En este ejemplo surgen dos problemas distintos:

Ambos bloques catch realizan la misma acción, llevando a código duplicado.


Atrapando múltiples excepciones en un solo bloque

Desde Java SE 7, puedes combinar varios tipos de excepción en un bloque catch usando el separador pipe (|).

Sintaxis:

try { // código } catch (TipoExcepcion1 | TipoExcepcion2 ex) { // manejador } 

Ejemplo 2: Bloque multi‑catch

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Salida

/ by zero

Al fusionar los manejadores, el código es más limpio, el bytecode más pequeño y el mantenimiento más fácil.

Nota: En un multi‑catch, el parámetro es implícitamente final, así que no puedes reasignarlo.


Usando una clase base de excepción

Si varias excepciones atrapadas comparten un ancestro común, puedes atrapar ese ancestro en lugar de listar cada subclase.

Ejemplo 3: Atrapando la clase base Exception

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } } } 

Salida

/ by zero

Como cada excepción específica en Java extiende Exception, este único bloque catch maneja todos los escenarios anteriores.


Si una excepción base ya es atrapada, incluir sus subclases en el mismo catch disparará un error de compilación.

Ejemplo 4: Combinación inválida de excepciones base e hijas

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Salida

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

Este error ocurre porque ArithmeticException y ArrayIndexOutOfBoundsException son subclases de Exception, violando la regla del lenguaje.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  4. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  5. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Dominando el manejo de excepciones en Java: Try, Catch, Finally y Recursos
  8. Java throw vs throws: Dominando el manejo de excepciones con ejemplos prácticos
  9. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  10. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  11. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código