Java Language introduction


Exemple

Les exceptions sont des erreurs qui surviennent lors de l'exécution d'un programme. Considérons le programme Java ci-dessous qui divise deux entiers.

class Division {
    public static void main(String[] args) {
 
        int a, b, result;
 
        Scanner input = new Scanner(System.in);
        System.out.println("Input two integers");
 
        a = input.nextInt();
        b = input.nextInt();
 
        result = a / b;
 
        System.out.println("Result = " + result);
    }
}

Maintenant, nous compilons et exécutons le code ci-dessus et voyons la sortie pour une tentative de division par zéro:

Input two integers
7 0
Exception in thread "main" java.lang.ArithmeticException: / by zero 
    at Division.main(Disivion.java:14)

Division par zéro est une opération invalide qui produirait une valeur qui ne peut être représentée par un entier. Java gère cela en lançant une exception . Dans ce cas, l'exception est une instance de la classe ArithmeticException .

Remarque: L'exemple de création et de lecture de traces de pile explique la signification de la sortie après les deux nombres.

L'utilitaire d'une exception est le contrôle de flux qu'il autorise. Sans exceptions, une solution typique à ce problème peut être de vérifier si b == 0 :

class Division {
    public static void main(String[] args) {
 
        int a, b, result;

        Scanner input = new Scanner(System.in);
        System.out.println("Input two integers");
 
        a = input.nextInt();
        b = input.nextInt();
 
        if (b == 0) {
            System.out.println("You cannot divide by zero.");
            return;
        }

        result = a / b;
 
        System.out.println("Result = " + result);
    }
}

Ceci imprime le message You cannot divide by zero. à la console et quitte le programme de manière harmonieuse lorsque l'utilisateur essaie de diviser par zéro. Une manière équivalente de traiter ce problème via la gestion des exceptions serait de remplacer le contrôle de flux if par un bloc try-catch :

...

a = input.nextInt();
b = input.nextInt();
 
try {
    result = a / b;
}
catch (ArithmeticException e) {
    System.out.println("An ArithmeticException occurred. Perhaps you tried to divide by zero.");
    return;
}
 
...  

Un bloc try est exécuté comme suit:

  1. Commencez à exécuter le code dans le bloc try .
  2. Si une exception se produit dans le bloc try, abandonnez immédiatement et vérifiez si cette exception est interceptée par le bloc catch (dans ce cas, lorsque l'exception est une instance de ArithmeticException ).
  3. Si l'exception est interceptée , elle est affectée à la variable e et le bloc catch est exécuté.
  4. Si le bloc try ou catch est terminé (c'est-à-dire qu'aucune exception n'est interceptée lors de l'exécution du code), continuez à exécuter le code sous le bloc try-catch .

Il est généralement considéré comme une bonne pratique d'utiliser la gestion des exceptions dans le cadre du contrôle de flux normal d'une application où le comportement serait autrement indéfini ou inattendu. Par exemple, au lieu de retourner null lorsqu'une méthode échoue, il est généralement préférable de lancer une exception pour que l'application utilisant la méthode puisse définir son propre contrôle de flux pour la situation via la gestion des exceptions du type illustré ci-dessus. D'une certaine manière, cela résout le problème de devoir renvoyer un type particulier, étant donné que plusieurs types d' exceptions peuvent être générés pour indiquer le problème spécifique survenu.

Pour plus de conseils sur comment et comment ne pas utiliser les exceptions, reportez-vous à la page sur les pièges Java - Utilisation des exceptions