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 :
ArithmeticExceptioncar nous essayons de diviser un nombre par 0.ArrayIndexOutOfBoundsExceptioncar nous avons déclaré un nouveau tableau d'entiers avec des bornes de tableau de 0 à 9 et nous essayons d'attribuer une valeur à l'index 10.
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