US

Générer des exceptions

Hiérarchie de classes des exceptions

Toutes les exceptions qui peuvent apparaitre dans un programme Java sont, on l'a vu à la section précédente, représentées par des classes Java. Ces classes sont organisées d'une certaine manière afin de former la hiérarchie de classes illustrée sur la figure j11.4.

Hiérarchie de classes des exceptions
fig j11.5 Hiérarchie de classes des exceptions

Comme pour toutes les classes Java, la classe mère est bien entendu la classe Object. Juste en dessous, on retrouve la classe mère des erreurs : la classe Throwable qui représente toute entité pouvant être générée suite à une erreur. nEsuite, on peut voir deux branches : la branche Error et la branche Exception.

La branche Error

Les classes qui se trouvent dans cette branche représente des erreurs graves qu'une application ne devrait pas gérer. En effet, les erreurs que l'on retrouve dans cette branche sont des erreurs qui surviennent dans des conditions anormales, erreurs qui ne devraient pas apparaitre dans les cas normaux.

On retrouve 4 sous-classes de Error :

  • LinkageError : Indique qu'une classe dépend d'autres éléments qui sont indisponibles.
  • ThreadDeath : Exception reçue par un thread qui meurt.
  • VirtualMachineError : Indique un problème au niveau de la machine virtuelle Java : manque de ressources, ou JVM cassée.
  • AWTError : Exception qui est générée lorsqu'une erreur grave au niveau d'AWT apparait.

La branche Exception

Dans cette branche, on retrouve des erreurs plus communes comme par exemple ArithmeticException qui représente une erreur d'arithmétique comme une division par zéro, NullPointerException qui apparait lorsqu'on travaille sur une variable de type objet qui contient la référence null, ArrayIndexOutOfBoundsException qui apparait lorsque l'on travaille avec les tableaux et qu'on tente d'accéder à un indice inexistant, ...

Les exceptions de cette branche sont donc celles que l'on va pouvoir attraper avec une instruction try-catch pour effectuer un traitement particulier. Remarquez enfin qu'on retrouve un partie séparée à cette branche : RuntimeException, on y reviendra très bientôt.

Générer une exception

Imaginons que l'on souhaite écrire une méthode qui permet de calculer la factorielle d'un nombre entier positif n. Pour rappel, la factorielle de n est notée n! et se calcule comme n = 1 . 2 . 3 . ... . n, et on a 0!=1.

Voyons tout d'abord une première manière d'écrire cette méthode. On va utiliser une précondition pour s'assurer que la méthode est bien appelée avec un entier positif.