Bonjour a tous, j'ai une question consernant un exercice(dont je n'ai pas compris le corrigé) voici d'abord le code:

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) ;
}
 
 
}
}
la question est la suivante :

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?