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();
COPYRIGHT 2001 LES ÉDITIONS REYNALD GOULET INC. TOUTE REPRODUCTION INTERDITE.
19 }
20 catch( ExceptionA a ) {
21 JOptionPane.showMessageDialog(
22 null, a.toString(), "Exception",
23 JOptionPane.INFORMATION_MESSAGE );
24 }
25
26 try {
27 throw new ExceptionB();
28 }
29 catch( ExceptionA b ) {
30 JOptionPane.showMessageDialog(
31 null, b.toString(), "Exception",
32 JOptionPane.INFORMATION_MESSAGE );
33 }
34
35 System.exit( 0 );
36 }
37 }
14.22 Écrivez un programme en Java qui montre que tous les finaliseurs des objets construits dans un bloc ne sont pas nécessaire-
ment appelés après la levée d’une exception à partir de ce bloc.
RÉP.:
1// Solution de l’exercice 14.22.
2// Demo.java
3// Ce programme montre que tous les finaliseurs ne sont pas nécessairement
4// appelés lorsqu’une exception apparaît.
5
6class ExceptionA extends Exception {}
7
8public class Demo {
9 private final static int DELAI = 40;
10
11 public static void main( String args[] )
12 {
13 Objet1 obj = new Objet1( "Robert" );
14
15 obj = new Objet1( "Marielle" );
16
17 // Essayer de forcer la collecte d’ordures.
18 System.gc();
19 System.gc();
20
21 try {
22 throw new ExceptionA();
23 }
24 catch( ExceptionA a ) {
25 System.out.println( "ExceptionA s’est produite" );
26 System.exit( 0 );
27 }
28
29 System.exit( 0 );
30 }
31 }
32
33 class Objet1 {
34 private String nom;
35
COPYRIGHT 2001 LES ÉDITIONS REYNALD GOULET INC. TOUTE REPRODUCTION INTERDITE.
36 public Objet1( String n ) {
37 nom = n;
38 System.out.println( "Créé un objet1 appelé " + nom );
39 }
40
41 protected void finalize() {
42 System.out.println( "Détruit un objet1 appelé " + nom );
43 }
44 }
14.23 Écrivez un programme en Java qui démontre comment diverses exceptions sont capturées par l’expression:
catch ( Exception e )
RÉP.:
1// Solution de l’exercice 14.23.
2// Demo2.java
3// Ce programme montre la capture d’une Exception e.
4
5class ExceptionA extends Exception {}
6
7class ExceptionB extends ExceptionA {}
8
9public class Demo2 {
10
11 public static void main( String args[] )
12 {
13 try {
14 throw new ExceptionA();
15 } catch( Exception e ) {
16 System.out.println( e.toString() );
17 }
18
19 try {
20 throw new ExceptionB();
21 } catch( Exception e ) {
22 System.out.println( e.toString() );
23 }
24
25 try {
26 throw new NullPointerException();
27 } catch( Exception e ) {
28 System.out.println( e.toString() );
29 }
30 }
31 }
14.24 Écrivez un programme en Java qui montre que l’ordre des gestionnaires d’exception est important. Si vous essayez de cap-
turer une exception d’un type de superclasse avant un type de sous-classe, le compilateur génère des erreurs. Expliquez pourquoi
ces erreurs apparaissent.
RÉP.:
Créé un objet1 appelé Robert
Créé un objet1 appelé Marielle
Détruit un objet1 appelé Robert
ExceptionA s’est produite
ExceptionA
ExceptionB
java.lang.NullPointerException
COPYRIGHT 2001 LES ÉDITIONS REYNALD GOULET INC. TOUTE REPRODUCTION INTERDITE.
1// Solution de l’exercice 14.24, partie II.
2// ErreurDeCompilation.java
3// Ce programme génère une erreur de compilation.
4import java.io.*;
5
6public class ErreurDeCompilation {
7 public static void main( String args[] )
8 {
9 try {
10 throw new IOException();
11 }
12 catch ( Exception e ) {
13 e.printStackTrace();
14 }
15 catch ( IOException io ) {
16 System.err.println( "IOException" );
17 }
18 }
19 }
14.25 Écrivez un programme en Java qui montre un constructeur passant des informations relatives à un échec à la construction,
à un gestionnaire d’exception situé après un bloc try.
RÉP.:
1// Solution de l’exercice 14.25.
2// Demo3.java
3// Ce programme montre un constructor qui lève une exception.
4
5class QuelquException {
6 public QuelquException() throws Exception
7 {
8 throw new Exception();
9 }
10 }
11
12 public class Demo3 {
13
14 public static void main( String args[] )
15 {
16 QuelquException o;
17
18 try {
19 o = new QuelquException();
20 } catch( Exception e ) {
21 System.out.println( e.toString() );
22 }
23 }
24 }
14.26 Écrivez un programme en Java qui illustre le relancement d’une exception.
RÉP.:
1// Solution de l’exercice 14.26.
2// Demo4.java
ErreurDeCompilation.java:15: catch not reached.
catch ( IOException io ) {
^
1 error
java.lang.Exception
COPYRIGHT 2001 LES ÉDITIONS REYNALD GOULET INC. TOUTE REPRODUCTION INTERDITE.
3// Ce programme montre le relancement d’une exception.
4import javax.swing.*;
5
6public class Demo4 {
7
8 public static void main( String args[] )
9 {
10 try {
11 methodeQuelconque();
12 }
13 catch( Exception e ) {
14 JOptionPane.showMessageDialog(
15 null, "Gérée dans main: " + e, "Exception",
16 JOptionPane.INFORMATION_MESSAGE );
17 }
18
19 System.exit( 0 );
20 }
21
22 public static void methodeQuelconque() throws Exception
23 {
24 try {
25 methodeQuelconque2();
26 }
27 catch( Exception e ) {
28 throw e; // Relancer l’exception.
29 }
30 }
31
32 public static void methodeQuelconque2() throws Exception
33 { throw new Exception(); }
34 }
14.27 Écrivez un programme en Java qui montre qu’une méthode qui a son propre bloc try n’est pas obligée de capturer toute
erreur possible, générée au sein du try. Quelques exceptions peuvent passer à travers les mailles du filet et se voir traitées sous
d’autres étendues.
RÉP.:
1// Solution de l’exercice 14.27.
2// Demo5.java
3// Ce programme montre comment relancer une exception.
4import javax.swing.*;
5
6class ExceptionA extends Exception {}
7
8public class Demo5 {
9
10 public static void main( String args[] )
11 {
12 try {
13 methodeQuelconque();
14 }
15 catch( Exception e ) {
16 JOptionPane.showMessageDialog(
17 null, "Gérée dans main: " + e, "Exception",
18 JOptionPane.INFORMATION_MESSAGE );
19 }
20
21 System.exit( 0 );
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !