Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Dominando Tratamento Multi-Exceção em Java

Dominando Tratamento Multi-Exceção em Java

Descubra como capturar várias exceções com um único bloco catch, simplifique seu código e evite armadilhas comuns.

Antes do Java 7, desenvolvedores tinham que escrever blocos catch separados para cada tipo de exceção, mesmo quando a lógica de tratamento era idêntica.

Considere o seguinte cenário.

Exemplo 1: Blocos 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()); } } } 

Saída

/ by zero

Neste exemplo dois problemas distintos podem surgir:

Ambos blocos catch realizam a mesma ação, levando a código duplicado.


Capturando Múltiplas Exceções em Bloco Único

Desde Java SE 7, você pode combinar vários tipos de exceção em um bloco catch usando o separador pipe (|).

Sintaxe:

try { // código } catch (TipoExcecao1 | TipoExcecao2 ex) { // manipulador } 

Exemplo 2: Bloco 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()); } } } 

Saída

/ by zero

Mesclando os manipuladores, o código fica mais limpo, o bytecode menor e a manutenção mais fácil.

Nota: Em multi-catch, o parâmetro é implicitamente final, então você não pode reatribuí-lo.


Usando Classe Base de Exceção

Se várias exceções capturadas compartilham ancestral comum, você pode capturar o ancestral em vez de listar cada subclasse.

Exemplo 3: Capturando a classe 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()); } } } 

Saída

/ by zero

Como toda exceção específica em Java estende Exception, este único bloco catch trata todos os cenários acima.


Se exceção base já é capturada, incluir suas subclasses no mesmo catch disparará erro de compilação.

Exemplo 4: Combinação inválida de exceção base e filhas

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()); } } } 

Saída

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

Este erro ocorre porque ArithmeticException e ArrayIndexOutOfBoundsException são subclasses de Exception, violando a regra da linguagem.

Java

  1. Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
  2. Comentários em Java: Tipos, Uso e Boas Práticas
  3. Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
  4. Dominando Strings em Java: Criação, Métodos e Boas Práticas
  5. Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
  6. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  7. Dominando Tratamento de Exceções em Java: Try, Catch, Finally e Resources
  8. Java throw vs throws: Dominando Tratamento de Exceções com Exemplos Práticos
  9. Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
  10. Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos