HOWTO · Java

Cattura più eccezioni in Java

Questo tutorial insegna i metodi che puoi eseguire per catturare più eccezioni in Java.

Oggi esamineremo i modi in cui possiamo utilizzare e rilevare più eccezioni in Java. Un’eccezione in Java si verifica quando si verifica un evento indesiderato durante il runtime. Il modo più comune per visualizzare un’eccezione è utilizzare le parole chiave try-catch. Qui, il try contiene il blocco di codice da controllare e il catch ha il codice da mostrare quando si verifica un’eccezione.

Verificheremo i tre metodi per utilizzare più eccezioni in una singola cattura con i seguenti esempi.

Cattura più eccezioni utilizzando più istruzioni Catch in Java

Nell’esempio, prendiamo i due input di tipo int dall’utente e poi li dividiamo per mostrare il risultato. Nota che abbiamo racchiuso questo codice in un blocco try; significa che deve avere anche un blocco catch.

Eccezioni multiple potrebbero essere generate come InputMismatchException quando il valore immesso non è di tipo int e ArithmeticException quando num2 ottiene il valore zero perché nessun numero è diviso per zero. Possiamo lanciare un’Exception che è il genitore di tutte le altre eccezioni.

Per catturarli tutti, scriviamo tre diversi blocchi catch con i loro tipi di eccezione e stampiamo il messaggio per mostrare quando si verifica quell’eccezione. L’output mostra i diversi risultati quando non ci sono eccezioni e quando ci sono eccezioni.

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!");
    }
  }
}

Uscita 1:

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

Uscita 2:

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

Uscita 3:

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

Cattura più eccezioni usando instanceOf in Java

Un altro metodo che puoi fare include l’uso della funzione instanceOf, che controlla se un oggetto è del tipo specificato o meno; restituisce un valore booleano. Usiamo lo stesso esempio di sopra, ma qui usiamo un singolo blocco catch con più istruzioni if.

Come discusso sopra, l’Exception è la classe genitore delle eccezioni più comuni. Possiamo usare il suo oggetto per verificare se l’eccezione generata è del tipo specificato. Qui esaminiamo le due eccezioni: 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!");
      }
    }
  }
}

Produzione:

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

Cattura più eccezioni in un blocco catch usando | in Giava

In Java 7 e versioni successive, possiamo utilizzare il simbolo della pipe o OR bit a bit per scrivere più eccezioni in una singola cattura. Nell’esempio, dividiamo i due numeri immessi e poi controlliamo se una delle due eccezioni è vera. Se è vero, verrà stampato il messaggio di errore.

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

Produzione:

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