Conception par Objet et Programmation Java

1/38
100%

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 6 : Les Exceptions

Equipe Java

2019-2020

![](Image15.jpg)

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

![](Picture1.jpg)

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

![](Picture2.jpg)

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

![](Picture2.jpg)

![](Picture4.jpg)

![](Picture5.jpg)

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

![](Picture3.jpg)

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

![](Picture2.jpg)

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.

![](Picture2.jpg)

![](Picture3.jpg)

<!-- 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);

}

}

![](Picture1.jpg)

<!-- 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);

} }}

![](Picture1.jpg)

<!-- 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");

}

}

![](Picture1.jpg)

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

![](Picture1.jpg)

<!-- Slide number: 22 -->

Solution 1 : gestion active avec try/catch

22

![](Picture1.jpg)

<!-- Slide number: 23 -->

Solution 2 : gestion passive avec throws

23

![](Picture1.jpg)

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

![](Picture1.jpg)

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

![](Picture8.jpg)

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

![](Picture1.jpg)

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

Conception par Objet et Programmation Java

Programming, Java, Exceptions · course

Browse all programmation documents

<!-- Slide number: 1 -->

Conception par Objet et Programmation Java

1

![](Picture6.jpg)

Chapitre 6 : Les Exceptions

Equipe Java

2019-2020

![](Image15.jpg)

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

![](Picture1.jpg)

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

Advertisement

![](Picture2.jpg)

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

![](Picture2.jpg)

![](Picture4.jpg)

![](Picture5.jpg)

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

![](Picture3.jpg)

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

![](Picture2.jpg)

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.

![](Picture2.jpg)

![](Picture3.jpg)

<!-- 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à.

Advertisement

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

}

}

![](Picture1.jpg)

<!-- 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);

} }}

![](Picture1.jpg)

<!-- 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");

}

}

![](Picture1.jpg)

<!-- Slide number: 20 -->

20

ckecked Exception

<!-- Slide number: 21 -->

Checked exception

21

Advertisement

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é

![](Picture1.jpg)

<!-- Slide number: 22 -->

Solution 1 : gestion active avec try/catch

22

![](Picture1.jpg)

<!-- Slide number: 23 -->

Solution 2 : gestion passive avec throws

23

![](Picture1.jpg)

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

![](Picture1.jpg)

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

![](Picture8.jpg)

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

Advertisement

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

![](Picture1.jpg)

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