Module Java Les Exceptions Une exception Evnement intervenant

  • Slides: 14
Download presentation
Module Java Les Exceptions

Module Java Les Exceptions

Une exception Evénement intervenant lors de l’exécution d’un programme qui interrompt le flow d’instructions

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

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

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

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 «

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 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

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

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

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

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

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

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

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