Christelle CAILLOUET
(christelle.caillouet@unice.fr)
C. Caillouet M213 - POO 2
Ges$on des excep$ons
— Objectifs :
— Rendre le programme robuste
— Limiter les instructions de traitement des cas
exceptionnels
— Mécanisme très souple de prise en compte fondé sur
la notion d’exception, qui permet :
— De dissocier la détection d’une anomalie de son
traitement;
— De séparer la gestion des anomalies du reste du code
C. Caillouet M213 - POO 3
L’excep$on
— Définition : c’est un objet qui peut être émis par une
méthode si un évènement d’ordre exceptionnel se
produit.
— La méthode émet alors une exception expliquant la
cause de cette émission.
C. Caillouet M213 - POO 4
Mot-clés
— Lancer une exception : throw (throws)
— Surveiller une partie du code : try
— Traiter l’exception : catch
— Classes d’exception standards prédéfinies :
— Throwable
— Exception
— RuntimeException
— Toutes les exceptions dérivent de la classe Exception qui
dérive de la classe Throwable
C. Caillouet M213 - POO 5
Classes d’excep$ons
— Classes qui héritent de la classe Throwable
— Un grand nombre de classes d’exceptions existent
dans l’API pour couvrir les erreurs les plus fréquentes
— Si aucune classe d’exception ne correspond au type
d’erreur rencontré, on peut écrire de nouvelles classes
d’exceptions è elles doivent impérativement hériter
de java.lang.Exception
C. Caillouet M213 - POO 6
Hiérarchie des classes d’excep$ons
C. Caillouet M213 - POO 7
Excep$ons levées par la JVM
— Erreur de compilation ou d’exécution
— NoClassDefFoundError, ClassFormatError
— Problème d’entrée/sortie
— IOException, AWTException
— Problème de ressources
— OutOfMemoryError, StackOverflowError
— Erreurs de programmation (Runtime)
— NullPointerException,
ArrayIndexOutOfBoundsException,
ArithmeticException, …
C. Caillouet M213 - POO 8
C. Caillouet M213 - POO 9
L’exécution du programme est interrompue.
Déclara$on
— Instruction throw :
— Lancement d’une exception : throw objet;
C. Caillouet M213 - POO 10
Déclara$on
— Pour chaque méthode : quelles classes d’exception
est-elle susceptible de déclencher ? (elle ou les
méthodes appelées)
— La méthode qui lève une exception doit déclarer cette
action potentielle
— À la fin de la déclaration de la méthode : throws
C. Caillouet M213 - POO 11
C. Caillouet M213 - POO 12
Ges$on d’erreurs par propaga$on
1. Une exception est générée à l’intérieur d’une méthode
2. Si la méthode prévoit un traitement de cette exception,
on va au point 4 ; sinon au point 3
3. L’exception est renvoyée à la méthode ayant appelé la
méthode courante, on retourne au point 2
4. L’exception est traitée et le programme reprend son
cours après le traitement de l’exception
C. Caillouet M213 - POO 13
Exemple
— Une méthode A appelle une méthode B qui appelle
une méthode C qui appelle un méthode D.
— La méthode D lève une exception.
— L’exception est transmise à C qui peut l’intercepter ou
la transmettre à B.
— B peut aussi l’intercepter ou la transmettre à A.
— L’interception se fait par une mise sur écoute d’une
portion du code…
C. Caillouet M213 - POO 14
Intercep$on
— Surveillance des exceptions éventuelles lancées par
une séquence cible d’instructions
— Surveiller ne veut pas dire traiter !
(mais obligation de traiter si on surveille…)
C. Caillouet M213 - POO 15
Comment intercepter une excep$on
— Exécuter un bloc d’instructions A suspect
— Si A ne fonctionne pas, l’erreur est prise en charge par
un bloc d’instructions B (cf. traitement)
— Si aucune erreur ne se produit dans A, B n’est pas
exécuté
C. Caillouet M213 - POO 16
Traitement
— Si un exception est levée dans A, l’exception levée est
transmise au gestionnaire d’exceptions (catch) qui va
exécuter la séquence de traitement B.
— La séquence de traitement peut elle-même :
— Appeler des méthodes
— Lever des exceptions
C. Caillouet M213 - POO 17
C. Caillouet M213 - POO 18
C. Caillouet M213 - POO 19
Reprise après excep$on
— Si une exception est levée et capturée, l’exécution
reprend à la suite du catch (et non là où l’exception a
été levée !)
C. Caillouet M213 - POO 20
Ne s’affichera pas !
Redéclenchement d’une excep$on
— Malgré la phase de traitement, on peut décider de
propager l’exception à un niveau supérieur
èPropagation directe
— Très utile si l’on ne peut résoudre localement qu’une
partie du problème
C. Caillouet M213 - POO 21
Plusieurs ges$onnaires d’excep$on
— Plusieurs bloc catch peuvent se succéder
— Attention aux relations d’héritage !
C. Caillouet M213 - POO 22
Bloc finally
— Le bloc finally est toujours exécuté lorsque le bloc try se termine
(sauf si la JVM crashe entre temps…)
— Affiche :
begin
in catch
hello world
C. Caillouet M213 - POO 23
try{
System.out.println("begin");
throw new Exception();
} catch (Exception e) {
System.out.println("in catch");
} finally {
System.out.println("hello world");
}
Clavier, écran, fichiers, erreurs, …
C. Caillouet M213 - POO 24
Le package java.io
— Ensemble de classes qui gèrent la plupart des entrées-
sorties d’un programme
— Gestion des entrées-sorties = créer un objet flux dans
lequel transitent les données à envoyer ou recevoir
— Un flux connecte un objet Java à un autre élément
— 2 cas étudiés :
— Interactions avec un utilisateur (entrée clavier, sortie écran)
— Lecture, écriture dans un fichier
C. Caillouet M213 - POO 25
https://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html
Etapes des échanges
1. Ouverture du flux
2. Lecture/écriture des données
3. Fermeture du flux
C. Caillouet M213 - POO 26
Un flux (stream)
— Représente un canal de communication
— Dans lequel circulent des données
— octets (Byte), caractères(Character), …
— Codage des caractères UNICODE sur 2 octets
— Ce flux peut être en entrée (ou lecture), ou en sortie
(ou écriture)
— Peut utiliser un buffer pour le traitement de lots
C. Caillouet M213 - POO 27
Classes java.io.*
— Flux de données :
— Classes InputStream et OutputStream
— Classes Reader et Writer
— Système de fichiers : Classe File
— Noms des classes :
— Origine ou destination du flot : tampon, fichier, tableau, tube
— Sens (lecture ou écriture) : Input, Output, Reader, Writer
— Octets ou Caractères : Stream ou Reader/Writer
BufferedInputStream : tampon/Lecture/octet
ByteArrayOutputStream : tableau/Ecriture/octet
BufferedWriter : tampon/caractère
C. Caillouet M213 - POO 28
Types de flux
— Flux d’octets
— Toutes les classes héritent de
InputStream ou
OutputStream
— Flux d’E/S standard :
in, out et err
— Flux de caractères
— Les classes dérivent des
classes abstraites Reader et
Writer
— Méthode de lecture : read()
C. Caillouet M213 - POO 29
Exemple :
lire un octet au clavier
Flux tampon
— améliorent les performances
— classe BufferedReader
public String readLine() throws IOException
è lit une ligne de texte et la retourne comme un objet
String
C. Caillouet M213 - POO 30
Lecture de caractères au clavier
C. Caillouet M213 - POO 31
Flux d’entrée : variable
statique in de la classe
java.lang.System
Création de flux
pour chaînes de
caractères
Lecture des données
Fermeture du flux
Flux sur fichiers
— Un fichier est un objet de java.io.File construit à
partir du chemin d’accès du fichier
— Mêmes types de flux sur fichiers :
— Flux d’octets : FileInputStream/
FileOutputStream à partir d’un objet de type File
— Flux de caractères : BufferedReader/
BufferedWriter à partir d’un objet de type
FileReader/FileWriter
C. Caillouet M213 - POO 32
Lecture par octets
C. Caillouet M213 - POO 33
Lecture par ligne de caractères
C. Caillouet M213 - POO 34
La classe Scanner
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
— Classe du package java.util
— Autre manière d’effectuer la lecture
— Découpe le fichier (ou la ligne) « en morceaux » en
fonction d’un délimiteur
— Peut lire un entier, double, String, …
C. Caillouet M213 - POO 35
Lecture avec Scanner
C. Caillouet M213 - POO 36
Ecriture dans un fichier
C. Caillouet M213 - POO 37
Flux d’objets
— 3 niveaux :
1. Une instance de ObjectInputStream/
ObjectOutputStream
2. se construit à partir d’un objet de type
FileInputStream/ FileOutputStream
3. qui se construit à partir d’un objet de type File
— On écrit/lit l’objet dans le fichier à l’aide de la méthode
writeObject(Object obj)
readObject()
C. Caillouet M213 - POO 38
Exemple
C. Caillouet M213 - POO 39
La fin de fichier
— La classe ObjectInputStream ne possède pas de
méthode pour détecter la fin du fichier.
è Utilisation du mécanisme des exceptions
— Tentative de lecture en fin de fichier : EOFException
— Pour détecter la fin de fichier, il suffit d’attraper cette
exception !
C. Caillouet M213 - POO 40

POO exception java orientée objet throw throws try catch

  • 1.
  • 2.
  • 3.
    Ges$on des excep$ons —Objectifs : — Rendre le programme robuste — Limiter les instructions de traitement des cas exceptionnels — Mécanisme très souple de prise en compte fondé sur la notion d’exception, qui permet : — De dissocier la détection d’une anomalie de son traitement; — De séparer la gestion des anomalies du reste du code C. Caillouet M213 - POO 3
  • 4.
    L’excep$on — Définition :c’est un objet qui peut être émis par une méthode si un évènement d’ordre exceptionnel se produit. — La méthode émet alors une exception expliquant la cause de cette émission. C. Caillouet M213 - POO 4
  • 5.
    Mot-clés — Lancer uneexception : throw (throws) — Surveiller une partie du code : try — Traiter l’exception : catch — Classes d’exception standards prédéfinies : — Throwable — Exception — RuntimeException — Toutes les exceptions dérivent de la classe Exception qui dérive de la classe Throwable C. Caillouet M213 - POO 5
  • 6.
    Classes d’excep$ons — Classesqui héritent de la classe Throwable — Un grand nombre de classes d’exceptions existent dans l’API pour couvrir les erreurs les plus fréquentes — Si aucune classe d’exception ne correspond au type d’erreur rencontré, on peut écrire de nouvelles classes d’exceptions è elles doivent impérativement hériter de java.lang.Exception C. Caillouet M213 - POO 6
  • 7.
    Hiérarchie des classesd’excep$ons C. Caillouet M213 - POO 7
  • 8.
    Excep$ons levées parla JVM — Erreur de compilation ou d’exécution — NoClassDefFoundError, ClassFormatError — Problème d’entrée/sortie — IOException, AWTException — Problème de ressources — OutOfMemoryError, StackOverflowError — Erreurs de programmation (Runtime) — NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException, … C. Caillouet M213 - POO 8
  • 9.
    C. Caillouet M213- POO 9 L’exécution du programme est interrompue.
  • 10.
    Déclara$on — Instruction throw: — Lancement d’une exception : throw objet; C. Caillouet M213 - POO 10
  • 11.
    Déclara$on — Pour chaqueméthode : quelles classes d’exception est-elle susceptible de déclencher ? (elle ou les méthodes appelées) — La méthode qui lève une exception doit déclarer cette action potentielle — À la fin de la déclaration de la méthode : throws C. Caillouet M213 - POO 11
  • 12.
  • 13.
    Ges$on d’erreurs parpropaga$on 1. Une exception est générée à l’intérieur d’une méthode 2. Si la méthode prévoit un traitement de cette exception, on va au point 4 ; sinon au point 3 3. L’exception est renvoyée à la méthode ayant appelé la méthode courante, on retourne au point 2 4. L’exception est traitée et le programme reprend son cours après le traitement de l’exception C. Caillouet M213 - POO 13
  • 14.
    Exemple — Une méthodeA appelle une méthode B qui appelle une méthode C qui appelle un méthode D. — La méthode D lève une exception. — L’exception est transmise à C qui peut l’intercepter ou la transmettre à B. — B peut aussi l’intercepter ou la transmettre à A. — L’interception se fait par une mise sur écoute d’une portion du code… C. Caillouet M213 - POO 14
  • 15.
    Intercep$on — Surveillance desexceptions éventuelles lancées par une séquence cible d’instructions — Surveiller ne veut pas dire traiter ! (mais obligation de traiter si on surveille…) C. Caillouet M213 - POO 15
  • 16.
    Comment intercepter uneexcep$on — Exécuter un bloc d’instructions A suspect — Si A ne fonctionne pas, l’erreur est prise en charge par un bloc d’instructions B (cf. traitement) — Si aucune erreur ne se produit dans A, B n’est pas exécuté C. Caillouet M213 - POO 16
  • 17.
    Traitement — Si unexception est levée dans A, l’exception levée est transmise au gestionnaire d’exceptions (catch) qui va exécuter la séquence de traitement B. — La séquence de traitement peut elle-même : — Appeler des méthodes — Lever des exceptions C. Caillouet M213 - POO 17
  • 18.
  • 19.
  • 20.
    Reprise après excep$on —Si une exception est levée et capturée, l’exécution reprend à la suite du catch (et non là où l’exception a été levée !) C. Caillouet M213 - POO 20 Ne s’affichera pas !
  • 21.
    Redéclenchement d’une excep$on —Malgré la phase de traitement, on peut décider de propager l’exception à un niveau supérieur èPropagation directe — Très utile si l’on ne peut résoudre localement qu’une partie du problème C. Caillouet M213 - POO 21
  • 22.
    Plusieurs ges$onnaires d’excep$on —Plusieurs bloc catch peuvent se succéder — Attention aux relations d’héritage ! C. Caillouet M213 - POO 22
  • 23.
    Bloc finally — Lebloc finally est toujours exécuté lorsque le bloc try se termine (sauf si la JVM crashe entre temps…) — Affiche : begin in catch hello world C. Caillouet M213 - POO 23 try{ System.out.println("begin"); throw new Exception(); } catch (Exception e) { System.out.println("in catch"); } finally { System.out.println("hello world"); }
  • 24.
    Clavier, écran, fichiers,erreurs, … C. Caillouet M213 - POO 24
  • 25.
    Le package java.io —Ensemble de classes qui gèrent la plupart des entrées- sorties d’un programme — Gestion des entrées-sorties = créer un objet flux dans lequel transitent les données à envoyer ou recevoir — Un flux connecte un objet Java à un autre élément — 2 cas étudiés : — Interactions avec un utilisateur (entrée clavier, sortie écran) — Lecture, écriture dans un fichier C. Caillouet M213 - POO 25 https://docs.oracle.com/javase/8/docs/api/java/io/package-summary.html
  • 26.
    Etapes des échanges 1.Ouverture du flux 2. Lecture/écriture des données 3. Fermeture du flux C. Caillouet M213 - POO 26
  • 27.
    Un flux (stream) —Représente un canal de communication — Dans lequel circulent des données — octets (Byte), caractères(Character), … — Codage des caractères UNICODE sur 2 octets — Ce flux peut être en entrée (ou lecture), ou en sortie (ou écriture) — Peut utiliser un buffer pour le traitement de lots C. Caillouet M213 - POO 27
  • 28.
    Classes java.io.* — Fluxde données : — Classes InputStream et OutputStream — Classes Reader et Writer — Système de fichiers : Classe File — Noms des classes : — Origine ou destination du flot : tampon, fichier, tableau, tube — Sens (lecture ou écriture) : Input, Output, Reader, Writer — Octets ou Caractères : Stream ou Reader/Writer BufferedInputStream : tampon/Lecture/octet ByteArrayOutputStream : tableau/Ecriture/octet BufferedWriter : tampon/caractère C. Caillouet M213 - POO 28
  • 29.
    Types de flux —Flux d’octets — Toutes les classes héritent de InputStream ou OutputStream — Flux d’E/S standard : in, out et err — Flux de caractères — Les classes dérivent des classes abstraites Reader et Writer — Méthode de lecture : read() C. Caillouet M213 - POO 29 Exemple : lire un octet au clavier
  • 30.
    Flux tampon — améliorentles performances — classe BufferedReader public String readLine() throws IOException è lit une ligne de texte et la retourne comme un objet String C. Caillouet M213 - POO 30
  • 31.
    Lecture de caractèresau clavier C. Caillouet M213 - POO 31 Flux d’entrée : variable statique in de la classe java.lang.System Création de flux pour chaînes de caractères Lecture des données Fermeture du flux
  • 32.
    Flux sur fichiers —Un fichier est un objet de java.io.File construit à partir du chemin d’accès du fichier — Mêmes types de flux sur fichiers : — Flux d’octets : FileInputStream/ FileOutputStream à partir d’un objet de type File — Flux de caractères : BufferedReader/ BufferedWriter à partir d’un objet de type FileReader/FileWriter C. Caillouet M213 - POO 32
  • 33.
    Lecture par octets C.Caillouet M213 - POO 33
  • 34.
    Lecture par lignede caractères C. Caillouet M213 - POO 34
  • 35.
    La classe Scanner https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html —Classe du package java.util — Autre manière d’effectuer la lecture — Découpe le fichier (ou la ligne) « en morceaux » en fonction d’un délimiteur — Peut lire un entier, double, String, … C. Caillouet M213 - POO 35
  • 36.
    Lecture avec Scanner C.Caillouet M213 - POO 36
  • 37.
    Ecriture dans unfichier C. Caillouet M213 - POO 37
  • 38.
    Flux d’objets — 3niveaux : 1. Une instance de ObjectInputStream/ ObjectOutputStream 2. se construit à partir d’un objet de type FileInputStream/ FileOutputStream 3. qui se construit à partir d’un objet de type File — On écrit/lit l’objet dans le fichier à l’aide de la méthode writeObject(Object obj) readObject() C. Caillouet M213 - POO 38
  • 39.
  • 40.
    La fin defichier — La classe ObjectInputStream ne possède pas de méthode pour détecter la fin du fichier. è Utilisation du mécanisme des exceptions — Tentative de lecture en fin de fichier : EOFException — Pour détecter la fin de fichier, il suffit d’attraper cette exception ! C. Caillouet M213 - POO 40