Solutions du chapitre 14
Traitement des exceptions
14.16 Sous quelles circonstances utiliseriez-vous l’instruction suivante?
catch ( Exception e ) { throw e; }
RÉP.: Cette instruction sert à capturer toute exception et à la relancer pour qu’elle soit gérée par un gestionnaire d’exception
placé dans un appel de méthode précédent dans la pile d’appel de méthodes.
14.17 Dénombrez les bénéfices qu’apporte le traitement des exceptions par rapport aux méthodes habituelles de traitement des er-
reurs.
14.18 Décrivez une technique orientée objets de gestion d’exceptions apparentées.
RÉP.: Créer une superclasse pour toutes les exceptions liées. Dans cette classe, placer toutes les fonctionnalités que les ex-
ceptions possèdent en commun. À partir de cette classe, dériver toutes les classes d’exceptions nécessaires. Une fois la hiérar-
chie de classes établie, les exceptions de cette hiérarchie sont ensuite susceptibles d’une capture soit sous la forme du type
d’exception de la superclasse, soit comme l’un des types de sous-classe de cette exception.
14.19 Jusqu’à ce chapitre, nous avons considéré que la gestion des erreurs détectées par les constructeurs est quelque peu malaisée.
Expliquez pourquoi le traitement des exceptions est une voie efficace qui permet la gestion des échecs des constructeurs.
RÉP.: Une exception levée transmet au monde extérieur des informations relatives au constructeur défaillant et la responsa-
bilité de gérer la défaillance. Les exceptions levées dans les constructeurs provoquent le marquage pour une éventuelle col-
lecte d’ordures des objets construits et faisant partie de l’objet en cours de construction.
14.20 Supposez qu’un programme lance une exception et que le gestionnaire d’exception adéquat commence à s’exécuter. Suppo-
sez à présent que le gestionnaire d’exception lui-même lance la même exception. Ceci provoque-t-il une récursion infinie? Détaillez
votre réponse.
RÉP.: Non. L’exception précédente est perdue et l’exception la plus récente est levée dans le bloc catch.
14.21 Utilisez l’héritage pour créer une superclasse d’exception et diverses sous-classes d’exception. Écrivez un programme de dé-
monstration que le catch qui spécifie la superclasse intercepte aussi les exceptions des sous-classes.
RÉP.:
1// Solution de l’exercice 14.21.
2// Demo.java
3// Ce programme montre qu’une superclasse d’exception
4// capture les exceptions de ses sous-classes.
5import javax.swing.*;
6
7class ExceptionA extends Exception {}
8
9class ExceptionB extends ExceptionA {}
10
11 class ExceptionC extends ExceptionB {}
12
13 public class Demo {
14
15 public static void main( String args[] )
16 {
17 try {
18 throw new ExceptionC();