next up previous contents index
suivant: 5.5 Exemple : arbres, monter: 5. Tout un monde précédent: 5.3 Interfaces   Table des matières   Index


5.4 Erreurs et exceptions

La notion d'exception décrit des situations où la procédure normale d'évaluation des expressions n'est pas pertinente. Cette procédure suppose que l'évaluation d'une expression (par exemple, d'une invocation de méthode) résulte en la production d'une valeur. Il y a des cas où une valeur n'est pas obtenue, quand la procédure d'évaluation conduirait à exécuter une opération qui ne peut pas ou ne doit pas être réalisée :

Il est donc possible que l'évaluation d'une expression, au lieu de retourner une valeur, déclenche une exception. Certaines de ces exceptions sont des erreurs, qui conduisent fatalement à une fin prématurée du programme. D'autres peuvent être récupérées pour permettre la poursuite du programme.

5.4.0.0.1 Une hiérarchie d'exceptions

En Java, les exceptions sont représentées par des objets de classe java.lang.Throwable, qui a deux sous-classes. La sous-classe Error est formée des exceptions qui ne sont pas considérées comme récupérables ; elles concernent les opérations de la Machine Virtuelle Java.

La sous-classe Exception est formée des exceptions considérées comme récupérables. Cependant, les objets de la sous-classe RuntimeException d'Exception ne sont pas obligatoirement récupérables : cette sous-classe comporte les exceptions

Les autres sous-classes d'Exception sont formées d'exceptions qui doivent être récupérées : par exemple, Ces exceptions sont dites contrôlées parce que le compilateur vérifie comment elles sont traitées. Les exceptions définies par le programmeur sont des sous-classes d'Exception ; elles sont donc contrôlées.

Une méthode qui est susceptible de lever une exception contrôlée doit :

Cette déclaration, sous la forme d'une liste d'exceptions, intervient dans la relation de typage.


5.4.0.0.2 Récupération

L'interception et le traitement sont réalisés en plaçant les appels susceptibles de déclencher une exception dans un try ... catch. La récupération minimale, qui gobe n'importe quelle exception, sans rien dire, est :

  try {
  ...
  }
  catch (Exception e) {}

Une version plus informative de cette récupération minimale consiste à imprimer la chaîne de caractères décrivant l'exception sur le flot de sortie en erreur standard, par System.err.println(e), ou mieux, à imprimer l'état de la pile :

    try {
      ...
    }
    catch (Exception e) {
      System.err.println("Exception: " + e.getMessage());
      e.printStackTrace()
    }

Ce style de programmation est nécessaire dans des logiciels qui doivent être robustes.

5.4.0.0.3 Déclenchement

Le déclenchement d'une exception provoque d'une part la sortie immédiate de la méthode, et d'autre part le dépilage des appels jusqu'à ce qu'apparaisse un cadre d'invocation d'une méthode contenant un catch : l'exception est donc propagée le long de la chaîne des invocations tant qu'elle n'est pas récupérée. Ce mécanisme de propagation est distinct du mécanisme usuel de retour d'une méthode. Si l'exception n'est jamais récupérée, le programme termine anormalement.

Le programmeur peut déclencher explicitement une exception grâce à l'instruction throw :

    throw new Exception("message explicatif");

5.4.0.0.4 Nouveaux types d'exception

Il est parfois nécessairede définir son propre type d'exception, pour identifier une catégorie particulière de situation. On procède par extension du type Exception, avec les deux constructeurs suivants, le second permettant d'associer un message textuel au déclenchement d'une exception :

class MonException extends Exception {

  MonException() {}

  MonException(String message) {
    super(message);
  }


next up previous contents index
suivant: 5.5 Exemple : arbres, monter: 5. Tout un monde précédent: 5.3 Interfaces   Table des matières   Index
Rene' LALEMENT 2001-11-07