Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java intercepte plusieurs exceptions

Java intercepte plusieurs exceptions

Dans ce tutoriel, nous allons apprendre à gérer plusieurs exceptions en Java à l'aide d'exemples.

Avant Java 7, nous devions écrire plusieurs codes de gestion des exceptions pour différents types d'exceptions, même en cas de redondance de code.

Prenons un exemple.

Exemple 1 :plusieurs blocs 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());
    } 
  }
}

Sortie

/ by zero

Dans cet exemple, deux exceptions peuvent se produire :

Nous imprimons le message d'exception à la fois dans le catch blocs, c'est-à-dire code en double.

L'associativité de l'opérateur d'affectation = est de droite à gauche, donc un ArithmeticException est lancé en premier avec le message / par zéro .

Gérer plusieurs exceptions dans un bloc catch

Dans Java SE 7 et versions ultérieures, nous pouvons désormais intercepter plus d'un type d'exception dans un seul catch bloquer.

Chaque type d'exception pouvant être géré par le catch le bloc est séparé à l'aide d'une barre verticale ou d'un tuyau | .

Sa syntaxe est :

try {
  // code
} catch (ExceptionType1 | Exceptiontype2 ex) { 
  // catch block
}

Exemple 2 :bloc multi-catch

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

Sortie

/ by zero

Attraper plusieurs exceptions dans un seul catch block réduit la duplication de code et augmente l'efficacité.

Le bytecode généré lors de la compilation de ce programme sera plus petit que le programme ayant plusieurs catch blocs car il n'y a pas de redondance de code.

Remarque : Si un catch bloc gère plusieurs exceptions, le paramètre catch est implicitement final . Cela signifie que nous ne pouvons attribuer aucune valeur aux paramètres catch.

Attraper l'exception de base

Lors de la capture de plusieurs exceptions dans un seul catch bloc, la règle est généralisée à spécialisée.

Cela signifie que s'il existe une hiérarchie d'exceptions dans le catch bloc, nous pouvons intercepter l'exception de base uniquement au lieu d'intercepter plusieurs exceptions spécialisées.

Prenons un exemple.

Exemple 3 :Capture de la classe d'exception de base uniquement

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

Sortie

/ by zero

Nous savons que toutes les classes d'exception sont des sous-classes du Exception classer. Ainsi, au lieu d'attraper plusieurs exceptions spécialisées, nous pouvons simplement attraper le Exception classe.

Si la classe d'exception de base a déjà été spécifiée dans le catch bloc, n'utilisez pas de classes d'exception enfants dans le même catch bloquer. Sinon, nous aurons une erreur de compilation.

Prenons un exemple.

Exemple 4 :Attraper les classes de base et les classes d'exception enfants

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

Sortie

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

Dans cet exemple, ArithmeticException et ArrayIndexOutOfBoundsException sont les deux sous-classes du Exception classer. Donc, nous obtenons une erreur de compilation.


Java

  1. Opérateurs Java
  2. Commentaires Java
  3. Java pour chaque boucle
  4. Chaînes Java
  5. InterfaceJava
  6. Classe anonyme Java
  7. Java essayer ... attraper
  8. Java lancer et lancer
  9. Java essayer avec des ressources