<!-- Slide number: 1 -->
Conception par Objet et Programmation Java
1

Chapitre 6 : Les Exceptions
Equipe Java
2019-2020

Notes:
<!-- Slide number: 2 -->
Plan
2
Introduction
Classe et objet
Encapsulation
Héritage
Polymorphisme
Exceptions
Connexion Base de donnée
Interfaces
Lambda Expression
Collections
Stream
<!-- Slide number: 3 -->
Objectifs
3
Dissocier la détection d’une anomalie de son traitement.
Séparer la gestion des anomalies du reste du code, donc de contribuer à la lisibilité programmes.
Savoir écrire un gestionnaire d’exception avec le bloc try
Savoir le cheminement d’une exception
Différencier l’utilisation des deux mots clés throw et throws
Comprendre l’utilisation du multicatch
<!-- Slide number: 4 -->
4
Exception: Définition
4
<!-- Slide number: 5 -->
Qu’est ce qu’une Exception?
5
Événement exceptionnel : erreur qui se produit lors de l’exécution
Cause l’arrêt de l’exécution normal du programme
Exemples:
Division par zéro
Accès à un élément au-delà de la limite d’un tableau
Saisie invalide
Crash du disque
Ouverture d’un fichier inexistant
Mémoire pleine
Etc..

<!-- Slide number: 6 -->
Exemple d’Exception
6
Exemple : Exception levée (déclenchée), mais non capturée
public class Exemple {
public static void main(String[] args) {
int x = 10, y = 0, z ;
z = x / y; }}
Aucune erreur lors de la compilation, mais :
Résultat d’exécution :
C:>java TestExemple
Exception in thread "main" java.lang.ArithmeticException:
/ by zero at Erreur.main(Erreur.java:4)
Publicité

Notes:
<!-- Slide number: 7 -->
Exception : Quand?
7
Une exception peut être déclenchée de deux façons :
1- l'exécution du programme ne se déroule pas de la façon prévue, et la machine Java génère une exception
2- le programme décide lui-même de déclencher une exception, afin de signaler à la méthode appelante que quelque chose ne se déroule pas comme prévu
<!-- Slide number: 8 -->
8
Exception: Mécanisme
<!-- Slide number: 9 -->
Exception (Mécanisme)
9
1) émission d’un signal : l’exception est levée (déclenchée)
2) interruption de l’exécution du programme en cours 3) possibilité d’attraper (intercepter) l’exception de manière à la traiter et éviter que le programme soit arrêté définitivement.
programmeur
ou java
programme en cours d’exécution
interruption du programme
signal
d’exception
traitement de ou arrêt
l’exception définitif
(plantage! avec message d’erreur)
reprise du programme



<!-- Slide number: 10 -->
Exemple d’Exception(Utilisateur)
10
Il est également possible de déclencher nos propres exceptions, qu'elles soient instances de classes fournies par l'API Java, ou de nos propres classes:

Le mot-clé throw fait partie des mots-clés réservés du langage Java, et il permet de forcer la génération d'une exception, représentée par l'objet qu'on lui passe en paramètre.
Notes:
<!-- Slide number: 11 -->
11
Types d’exceptions
<!-- Slide number: 12 -->
Hiérarchie des exceptions
12

Notes:
<!-- Slide number: 13 -->
Les types d’Exceptions(1/3)
13
Les exceptions standards :
Java fournit de nombreuses classes prédéfinies, dérivées de la classe Exception, qui sont utilisées par certaines méthodes standard ; par exemple, la classe IOException est utilisée par les méthodes d’entrées-sorties.


<!-- Slide number: 14 -->
Les types d’Exceptions (2/3)
14
Throwable est la classe de base, à partir de laquelle vont dériver toutes les exceptions.
Error: Elle gère les erreurs liées à la machine virtuelle (LinkageError, ThreadDeath etc.)
Exception: contient l'ensemble des exceptions gérées par le
Programmeur (ArithmeticException etc.).
RunTimeException: regroupe les erreurs de base(Arithmetic, etc.)
IOException: regroupe les erreurs entrée/sortie.
Error et RunTimeException appartiennent à la catégorie
« uncheked » donc "throws" n'est pas nécessaire à coté de la
méthode qui lance une exception de cette catégorie là.
Publicité
Toutes les autres exceptions (y compris donc celles créées par le
programmeur) appartiennent à la catégorie des "checked" où
l'utilisation de "throws" est exigée.
<!-- Slide number: 15 -->
Les types d’Exceptions (3/3)
15
Throwable possède 2 sous classes standard: java.lang.Error et java.lang.Exception.
- Les exceptions qui sont des sous classes de Error sont généralement irrécupérables (ex: la VM n'a plus de mémoire)
- Les exceptions sous classes de Exception indiquent des situations moins sévères (ex: EOFException) signalant la fin d'un fichier ou
ArrayIndexOutOfBoundsException indiquant l'accès en dehors des limites d'un tableau.
<!-- Slide number: 16 -->
16
unckecked Exception
<!-- Slide number: 17 -->
Unchecked exception(1/3)
17
public class TestException {
public static void main(String[] args) {
int a=5,b=0,c;
c=a/b;
System.out.println("le résultat"+c);
}
}

<!-- Slide number: 18 -->
Unchecked exception(2/3)
18
public class TestException {
public static void main(String[] args) {
try {
int a=5,b=0,c;
c=a/b;
System.out.println("le résultat"+c);
}
catch (ArithmeticException ex)
{
System.out.println(ex);
} }}

<!-- Slide number: 19 -->
Unchecked exception(3/3)
19
public class TestException {
public static void main(String[] args) {
try {
int a=5,b=0,c;
c=a/b;
System.out.println("le résultat"+c);
}
catch (ArithmeticException ex)
{
System.out.println(ex);
}
System.out.println("poursuite du programme");
}
}

<!-- Slide number: 20 -->
20
ckecked Exception
<!-- Slide number: 21 -->
Checked exception
21
Publicité
Le constructeur de la classe java.io.PrintWriter est susceptible, par définition (cf. api), de renvoyer une exception du type java.io.IOException. C’est pourquoi le code suivant ne peut pas être compilé

<!-- Slide number: 22 -->
Solution 1 : gestion active avec try/catch
22

<!-- Slide number: 23 -->
Solution 2 : gestion passive avec throws
23

<!-- Slide number: 24 -->
24
La gestion des exceptions
<!-- Slide number: 25 -->
Gérer une exception
25
Il y a deux façons de réagir au déclenchement
d'une exception pour un programme :
soit l'exception est traitée localement au code exécuté
soit l'exception est transmise à la fonction
appelante, qui elle-même peut choisir ce qu'elle en fait

<!-- Slide number: 26 -->
Gérer une exception (localement)
26
try
{ bloc de programme susceptible de provoquer une exception
}
catch (TypeDexception e)
{ bloc de traitement de l'exception }

<!-- Slide number: 27 -->
27
Bloc finally
<!-- Slide number: 28 -->
Bloc Finally
28
try { ... }
catch (IOException ioex) { ... }
finally { ... }
<!-- Slide number: 29 -->
Bloc Finally
29
try { ... }
catch (ClassException e1) { ... }
catch (ClassException e2) { ... }
finally { ... }
Il est possible d’avoir un ensemble try/finally sans la clause catch
<!-- Slide number: 30 -->
30
Les Exceptions personnalisées
<!-- Slide number: 31 -->
Les Exceptions personnalisées
31
La gestion des exceptions personnalisées:
Ne pas utiliser des types d’exceptions standard fourni par le langage
Création et gestion de ses propres exceptions selon le besoin du programme.
Objectif :
Adapter le comportement de vos propres classes d’exception aux besoins de vos propres programmes.
<!-- Slide number: 32 -->
Les Exceptions personnalisées
32
Comment créer ses propres exceptions :
Publicité
Dériver (spécialiser)une classe de type Exception
Créer uniquement deux constructeurs : un constructeur sans paramètre et un constructeur qui prend un message (String) en paramètre.
Création d’une exception personnalisée
en Java.
public class EmployeException extends Exception {
public EmployeException(){
super();}
public EmployeException(String message){
super(message);
System.out.println("Vous essayez d'instancier un Employe avec un age négatif !");
} }
<!-- Slide number: 33 -->
Les Exceptions personnalisées
33
//Déclaration de la classe ErrEmpl
throws:permet de signaler à la JVM qu'un morceau de code, une méthode, une classe… est susceptible. Il est suivi du nom de la classe qui va gérer l'exception.
throw : celui-ci permet tout simplement de lever une exception manuellement en instanciant un objet de type Exception (ou un objet hérité).
public class Employe
{
public Employe(int age) throws EmployeException //méthode susceptible de déclencher l’erreur
{ if ( (age<0))
throw new EmployeException() ; // lance une exception
de type EmployeException
else {this.age=age ;}
public void affiche()
{ System.out.println(‘’age : ‘’+age);}}}
<!-- Slide number: 34 -->
34
Remarques
<!-- Slide number: 35 -->
Remarques
35
- le bloc try et les gestionnaires associés doivent être contigus.
Cette construction est erronée :
try
{ .....
}
.....
.....
catch (ErrConst) // erreur : catch doit être contigu au bloc try
{ ..... }
- Vous pouvez ajouter autant de blocs catch que vous le voulez à la suite d'un bloc try, mais respectez l'ordre : du plus pertinent au moins pertinent.
<!-- Slide number: 36 -->
Remarques
36
Méthodes de la classe throwable:
getMessage() : retourne le message d’erreur associé à l’instance de Throwable
printStackTrace(): affiche sur la sortie standard des erreurs (System.err), le message d’erreur et la pile des appels de méthodes qui ont conduit au problème
<!-- Slide number: 37 -->
Remarques
37

<!-- Slide number: 38 -->
Remarques
38
- Un bloc finally est en général utilisé pour effectuer des nettoyages (fermer des fichiers, libérer des ressources...).
- Un bloc finally suit:
soit un bloc try
soit un bloc try suivi d'un ou plusieurs bloc catch
- Ce bloc contient les instructions qui sont toujours exécutées après avoir quitté la clause /try, indépendamment du type de sortie (normalement, exception gérée par un catch, exception non saisie, return, break, continue).
- Seul l'appel de System.exit() empêchera l'exécution du bloc finally