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

Java captura múltiplas exceções

Java captura várias exceções


Neste tutorial, aprenderemos a lidar com várias exceções em Java com a ajuda de exemplos.

Antes do Java 7, tínhamos que escrever vários códigos de manipulação de exceção para diferentes tipos de exceção, mesmo que houvesse redundância de código.

Vamos dar um exemplo.

Exemplo 1:vários blocos catch

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, duas exceções podem ocorrer:

Estamos imprimindo a mensagem de exceção no catch blocos, ou seja, código duplicado.

A associatividade do operador de atribuição = é da direita para a esquerda, então um ArithmeticException é lançado primeiro com a mensagem / by zero .

Lidar com várias exceções em um bloco catch


No Java SE 7 e posterior, agora podemos capturar mais de um tipo de exceção em um único catch quadra.

Cada tipo de exceção que pode ser tratado pelo catch bloco é separado usando uma barra vertical ou barra vertical | .

Sua sintaxe é:
try {
  // code
} catch (ExceptionType1 | Exceptiontype2 ex) { 
  // catch block
}

Exemplo 2:bloco de captura múltipla

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

Capturando várias exceções em um único catch block reduz a duplicação de código e aumenta a eficiência.

O bytecode gerado durante a compilação deste programa será menor do que o programa com vários catch blocos, pois não há redundância de código.



Observação: Se um catch bloco trata várias exceções, o parâmetro catch é implicitamente final . Isso significa que não podemos atribuir nenhum valor aos parâmetros de captura.

Capturando a exceção base


Ao capturar várias exceções em um único catch bloco, a regra é generalizada para especializada.

Isso significa que, se houver uma hierarquia de exceções no catch bloco, podemos capturar a exceção base apenas em vez de capturar várias exceções especializadas.

Vamos dar um exemplo.

Exemplo 3:capturando apenas a classe de exceção base

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

Sabemos que todas as classes de exceção são subclasses do Exception classe. Portanto, em vez de capturar várias exceções especializadas, podemos simplesmente capturar o Exception classe.


Se a classe de exceção base já foi especificada no catch bloco, não use classes de exceção filhas no mesmo catch quadra. Caso contrário, teremos um erro de compilação.

Vamos dar um exemplo.

Exemplo 4:capturando classes de exceção base e filha

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

Neste exemplo, ArithmeticException e ArrayIndexOutOfBoundsException são ambas subclasses do Exception classe. Assim, obtemos um erro de compilação.

Java

  1. Operadores Java
  2. Comentários Java
  3. Java para cada loop
  4. Strings Java
  5. Interface Java
  6. Classe anônima Java
  7. Java tentar... pegar
  8. Java joga e joga
  9. Java try-with-resources
  10. Anotações Java