Module Java Les Exceptions Une exception Evnement intervenant














- Slides: 14
Module Java Les Exceptions
Une exception Evénement intervenant lors de l’exécution d’un programme qui interrompt le flow d’instructions normales d’un programme. • Les exceptions entraine une interruption dans le programme • En java, une « Exception » est une classe étendant la classe « Throwable »
Classe « Throwable » • Classe de base de toutes les exceptions et étendant directement la classe « Object » . Méthode String get. Message() Retourne le message de l’exception void print. Stack. Trace() Affiche l’exception avec l’état de la pile ( « stack » ). Throwable get. Cause() Retourne l’origine de l’erreur
Classe « Error » • Classe représentant une erreur grave en provenance de la JVM ou d’un de ses composants • Cette erreur entraine un arrêt du programme Vous ne devez pas étendre de la classe Error
Classe « Exception » • Classe représentant les erreurs classiques remontées le plus souvent par les méthodes • Ces exceptions doivent être interceptées par le bloc « try catch »
Classe Runtime. Exception • Classe dont les exceptions ne sont pas obligatoirement par « try catch » • Ces exceptions peuvent être levées sans que la méthode l’indique via le mot clé « throws » . On parle d’exception implicite • Exemple : § § Null. Pointer. Exception Array. Index. Out. Of. Bounds. Exception
Exception personnalisée • Pour créer de nouvelles exceptions, il suffit d’étendre la classe « Exception » public class User. Not. Found. Exception{ public User. Not. Found. Exception() { super("Utilisateur non trouvé"); } } extends Par convention, les exceptions sont suffixées par le mot « Exception »
Déclarer l’exception • Pour indiquer qu’une méthode peut « lever » une exception, il faut utiliser le mot clé « throws » public User find. User. By. Id(Long identifier) throws User. Not. Found. Exception{ /* code */ }
Lever l’exception • Pour lever l’exception, le mot clé « throw » doit être utilisé suivi d’une instance de la classe d’exception. • La levée de l’exception entraine une interruption de la méthode. public User find. User. By. Id(Long identifier) throws User. Not. Found. Exception{ User user = this. users. get(identifier); if(user == null) { throw new User. Not. Found. Exception(); } return user; }
Interception de l’exception • Tout exception n’étendant ni Runtime. Exception ni Error doit être intercepté par un bloc « try catch » try { User user = user. Service. find. User. By. Id(2 L); Toute variable déclarée dans le bloc try catch n’est visible qu’au sein du bloc // autres instructions }catch(User. Not. Found. Exception e) { System. err. println(e. get. Message()); } // autres instructions Interception de l’exception
Interception des exceptions • Il est possible d’avoir plusieurs catch à la suite dans le cas ou la méthode retourne plusieurs exceptions try { User user = user. Service. find. User. By. Id(2 L); }catch(User. Not. Found. Exception e) { System. err. println("Exception remontée"); System. err. println(e. get. Message()); throw e; }catch(Null. Pointer. Exception e) { throw e; }
Interception des exceptions • Depuis Java 7, possibilité de regrouper les exceptions dans le catch. • Les exceptions sont séparées par « |» try { User user = user. Service. find. User. By. Id(2 L); }catch(User. Not. Found. Exception| Null. Pointer. Exception e) { System. err. println("Exception remontée"); System. err. println(e. get. Message()); throw e; }
Le mot clé « finally » • Dans la cas ou un exception va être levée, le mot clé « finally » permet d’exécuter des traitements avant que le fil du programme ne soit interrompu. • Ne pas mettre de return dans un bloc finally
Le mot clé « finally » public static void main(String. . . args) throws Exception{ User. Service user. Service = new User. Service(); try { User user = user. Service. find. User. By. Id(2 L); }catch(User. Not. Found. Exception e) { System. err. println("Exception remontée"); 1 System. err. println(e. get. Message()); throw e; } finally { 2 System. out. println("Traitement finally en cours"); } } Passage dans le catch 1 Passage dans le bloc finally 2 Interruption du programme par le throw 3 Exception remontée Utilisateur non trouvé Traitement finally en cours Exception in thread "main" cours 2. User. Not. Found. Exception: Utilisateur non trouvé at cours 2. User. Service. find. User. By. Id(User. Service. java: 17) at cours 2. User. Service. main(User. Service. java: 26