HOWTO · Java

Capture Múltiplas Exceções em Java

Este tutorial ensina sobre os métodos que você pode fazer para capturar várias exceções em Java.

Hoje, veremos as maneiras como podemos usar e capturar várias exceções em Java. Uma exceção em Java ocorre quando um evento indesejado ocorre durante o tempo de execução. A maneira mais comum de ver uma exceção é usar as palavras-chave try-catch. Aqui, o try contém o bloco de código a ser verificado e o catch contém o código para mostrar quando ocorre uma exceção.

Verificaremos os três métodos para usar várias exceções em uma única captura com os exemplos a seguir.

Capture várias exceções usando várias instruções Catch em Java

No exemplo, pegamos as duas entradas do tipo int do usuário e depois as dividimos para mostrar o resultado. Observe que incluímos esse código em um bloco try; isso significa que ele deve ter um bloco catch também.

Múltiplas exceções podem ser lançadas como InputMismatchException quando o valor inserido não é do tipo int e ArithmeticException quando num2 obtém o valor zero porque nenhum número é dividido por zero. Podemos lançar uma Exception que é o pai de todas as outras exceções.

Para capturar todos eles, escrevemos três blocos catch diferentes com seus tipos de exceção e imprimimos a mensagem para mostrar quando essa exceção ocorre. A saída mostra os diferentes resultados quando não há exceção e quando há exceções.

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (InputMismatchException e1) {
      System.out.println("Error! - Please enter a number.");
    } catch (ArithmeticException e2) {
      System.out.println("Error! - You cannot divide any number with 0");
    } catch (Exception e3) {
      System.out.println("An error occurred please try again!");
    }
  }
}

Produto 1:

Enter two numbers : num1 : 10 num2 : 2 After division result : 5

Produto 2:

Enter two numbers : num1 : 50 num2 : hhh Error !-Please enter a number.

Produto 3:

Enter two numbers : num1 : 10 num2 : 0 Error !-You cannot divide any number with 0

Capture Múltiplas Exceções Usando instanceOf em Java

Outro método que você pode fazer inclui usar a função instanceOf, que verifica se um objeto é do tipo fornecido ou não; ele retorna um valor booleano. Usamos o mesmo exemplo acima, mas aqui usamos um único bloco catch com várias instruções if.

Conforme discutido acima, a Exceção é a classe pai das exceções mais comuns. Podemos usar seu objeto para verificar se a exceção lançada é do tipo fornecido. Aqui, revisamos as duas exceções: InputMismatchException e ArithmeticException.

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (Exception e) {
      if (e instanceof InputMismatchException) {
        System.out.println("Error! - Please enter a number.");
      } else if (e instanceof ArithmeticException) {
        System.out.println("Error! - You cannot divide any number with 0");
      } else {
        System.out.println("An error occurred please try again!");
      }
    }
  }
}

Resultado:

Enter two numbers: 
num1: 
d
Error! - Please enter a number.

Capture Múltiplas Exceções em um Bloco Catch Usando | em Java

No Java 7 e posterior, podemos usar o símbolo de pipe ou bit a bit OR para escrever várias exceções em uma única captura. No exemplo, dividimos os dois números inseridos e, em seguida, verificamos se alguma das duas exceções é verdadeira. Se for verdade, a mensagem de erro será impressa.

import java.util.InputMismatchException;
import java.util.Scanner;

public class MultiExceptions {
  public static void main(String[] args) {
    System.out.println("Enter two numbers: ");
    Scanner sc = new Scanner(System.in);
    try {
      System.out.println("num1: ");
      int num1 = sc.nextInt();

      System.out.println("num2: ");
      int num2 = sc.nextInt();

      int dividedNum = num1 / num2;

      System.out.println("After division result: " + dividedNum);

    } catch (InputMismatchException | ArithmeticException e) {
      System.out.println("An error occurred please try again");
    }
  }
}

Resultado:

Enter two numbers: 
num1: 
f
An error occurred please try again