JavaRush /Blog Java /Random-FR /Les exceptions et leur traitement
articles
Niveau 15

Les exceptions et leur traitement

Publié dans le groupe Random-FR
Les exceptions ou situations exceptionnelles (états) sont des erreurs qui surviennent dans un programme lors de son fonctionnement. Toutes les exceptions en Java sont des objets. Par conséquent, ils peuvent être générés non seulement automatiquement lorsqu'une situation exceptionnelle se produit, mais également créés par le développeur lui-même. Hiérarchie des classes d'exceptions : Exceptions et leur traitement - 1les exceptions sont divisées en plusieurs classes, mais elles ont toutes un ancêtre commun : la classe Throwable. Ses descendants sont les sous-classes Exceptionet Error. Les exceptions ( Exceptions) sont le résultat de problèmes dans un programme qui sont, en principe, résolubles et prévisibles. Par exemple, la division par zéro s'est produite dans des nombres entiers. Les erreurs ( Errors) sont des problèmes plus graves que la spécification Java indique que vous ne devez pas tenter de gérer dans votre propre programme car il s'agit de problèmes au niveau de la JVM. Par exemple, des exceptions de ce type se produisent si la mémoire disponible sur la machine virtuelle est épuisée. Le programme ne sera toujours pas en mesure de fournir de la mémoire supplémentaire pour la JVM. En Java, toutes les exceptions sont divisées en trois types : les exceptions vérifiées ( checked) et les exceptions non vérifiées ( unchecked) qui incluent les erreurs ( Errors) et les exceptions d'exécution ( RuntimeExceptionsdescendant de classe Exception). Les exceptions contrôlées sont des erreurs qui peuvent et doivent être gérées dans un programme ; tous les descendants d'une classe Exception(mais pas RuntimeException) appartiennent à ce type. La gestion des exceptions peut être effectuée à l'aide d'opérateurs try…catchou transférée vers la partie externe du programme. Par exemple, une méthode peut transmettre les exceptions qui s'y produisent plus haut dans la hiérarchie des appels sans la gérer elle-même. Les exceptions non cochées ne nécessitent pas de traitement, mais vous pouvez gérer les exceptions de classe si vous le souhaitez RuntimeException. Compilons et exécutons le programme suivant :
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Au lancement, le message suivant s'affichera sur la console :
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Le message indique la classe de l'exception survenue - ArithmeticException. Cette exception peut être gérée :
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Désormais, au lieu d'un message d'erreur standard, un bloc sera exécuté catch, dont le paramètre est l'objet e de la classe correspondant à l'exception (l'objet lui-même peut recevoir n'importe quel nom, il sera nécessaire si nous voulons lancer avec force cette exception à nouveau, par exemple, afin qu'elle soit vérifiée par un autre gestionnaire). Dans ce cas, le bloc trycontient le fragment du programme où une exception pourrait potentiellement se produire. On trypeut correspondre à plusieurs blocs catch avec des classes d'exceptions différentes.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
Si, après avoir lancé le programme présenté, l'utilisateur entre à partir du clavier 1 ou 2, le programme s'exécutera sans créer d'exceptions. Si l'utilisateur entre 0, une exception de classe se produira ArithmeticExceptionet sera gérée par le premier bloc catch. Si l'utilisateur entre 3, une exception de classe se produira ArrayIndexOutOfBoundsException(tableau hors limites) et elle sera traitée par le deuxième bloc catch. Si l'utilisateur saisit un nombre non entier, par exemple 3,14, une exception de classe se produira InputMismatchException(incompatibilité de type d'entrée) et elle sera renvoyée au format d'erreur standard, car nous ne l'avons traité d'aucune façon. Vous pouvez cependant ajouter un gestionnaire pour la classe Exception, puisque cette classe est la classe parent de toutes les autres exceptions vérifiées, elle interceptera chacune d'entre elles (y compris InputMismatchException).
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Howое-то исключение");
        }
    }
}
Étant donné que les exceptions reposent sur une hiérarchie de classes et de sous-classes, vous devez d'abord essayer de gérer les exceptions plus spécifiques, puis ensuite les plus générales. Autrement dit, si nous placions le bloc avec la gestion des exceptions de classe en premier (et non en troisième) Exception, nous ne verrions jamais de message d'erreur autre que « Une autre exception s'est produite » (toutes les exceptions seraient immédiatement interceptées par ce bloc et n'atteindraient pas le repos). Un ajout facultatif aux blocs try…catchpeut être un bloc finally. Les commandes qui y sont placées seront exécutées dans tous les cas, qu'une exception se produise ou non. Malgré le fait que lorsqu'une exception non gérée se produit, la partie du programme restant après la génération de cette exception n'est pas exécutée. Par exemple, si une exception s'est produite lors de calculs longs, finallyvous pouvez afficher ou enregistrer les résultats intermédiaires dans un bloc. Lien vers la source : Exceptions et leur traitement
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION