Bonjour a tous, j'ai une question consernant un exercice(dont je n'ai pas compris le corrigé) voici d'abord le code:
la question est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 class Erreur extends Exception { public int num ; } class Erreur_d extends Erreur { public int code ; } class A { public A(int n) throws Erreur_d { if (n==1) { Erreur_d e = new Erreur_d() ; e.num = 999 ; e.code = 12 ; throw e ; } } } public class Test { public static void main (String args[]) { try { A a = new A(1) ; System.out.println ("apres creation a(1)") ; } catch (Erreur e) { System.out.println ("** exception Erreur " + e.num) ; } System.out.println ("suite main") ; try { A b = new A(1) ; System.out.println ("apres creation b(1)") ; } catch (Erreur_d e) { System.out.println ("** exception Erreur_d " + e.num + " " + e.code) ; } catch (Erreur e) { System.out.println ("** exception Erreur " + e.num) ; } } }
Que se passe-t-il si l’on inverse l’ordre des deux gestionnaires dans le second bloc try ?
d'apres le corrigé:
Si l’on inverse l’ordre des deux gestionnaires dans le second bloc try, on obtient une erreur de compilation car le second n’a aucune chance d’être sélectionné.
ma question:
pourquoi obtient-on une erreur alors que A déclenche une exception de type
Erreur_d. Celle-ci est traitée par l’unique gestionnaire relatif au type Erreur, lequel convient effectivement puisque Erreur_d dérive de Erreur.
y'a t-il un ordre a respecter lorsque on écrit les différents gestionnaires d'erreurs c'est à dire: commencer du plus spécifique et terminer par le plus général?
Partager