Vous êtes sur la page 1sur 80

Exceptions en JAVA

Exceptions en JAVA
Définition
Les exceptions sont des événements inattendus et non désirés
qui empêchent l'exécution normale du programme. Dans le
monde de la programmation, vous pouvez être confronté à des
scénarios dans lesquels le déroulement normal du programme
est perturbé par un événement inattendu.
Exceptions en JAVA
Exemple :
Supposons que vous êtes en train de lire un fichier sur le
serveur distant. Pour une raison quelconque, le fichier distant
n'est pas accessible, cet événement indésirable est appelé
L'exception FileNotFoundException est levée.

Si vous lisez des données à partir d'une base de données, vous


avez un flux. Ouvrir une connexion db → lire les données →
fermer la connexion à la base de données. Si une exception est
levée pendant la lecture des données, le programme se termine
et lance une exception.
Exceptions en JAVA
Exemple

Si vous êtes en train de préparer une présentation et


que vous avez oublié de sauvegarder et que soudain
l'alimentation est coupée. Vous perdrez votre travail. Ici,
la coupure de courant est une exception.
Exceptions en JAVA
Pourquoi devrions-nous gérer les exceptions ?

Si l'exécution normale du flux est perturbée, vous


pouvez vouloir gérer cette perturbation en proposant
une alternative. Ceci n'est rien d'autre que le traitement
de l'exception.

La gestion des exceptions ne signifie pas la réparation de


l'exception, nous devons fournir une alternative pour
continuer le reste du programme normalement.
Exceptions en JAVA
Exemple de gestion les exceptions

S'il y a une exception pendant la lecture d'un fichier à


distance, vous fournissez un fichier local au lieu d'un
fichier distant comme moyen alternatif de traiter
l'exception.
Exceptions en JAVA
Exemple de gestion les exceptions

Si vous travaillez sur un programme avec une base de données qui


peut traiter un nombre limité de connexions simultanées et que
vous procédez comme suit : 1. Ouvrir une connexion db → lire des
données → fermer la connexion db.

S'il y a une exception lors de la lecture des données alors le


programme se terminera et la connexion db restera ouverte.
Maintenant, cette connexion est gaspillée et toute personne qui
souhaite se reconnecter, il est possible qu'il n'y ait plus de
connexion disponible. Puisque le programme n'a pas été terminé
de manière élégante, nous voulons terminer le programme
correctement en fermant la base de données et en libérant
correctement toutes les ressources.
Exceptions en JAVA
Exemple de gestion les exceptions

Si vous préparez une présentation et que vous avez oublié


de sauvegarder et que soudain, l'alimentation est coupée.
Vous perdrez votre travail. La coupure de courant est ici
une exception. Quand vous démarrez votre ordinateur,
vous devez tout refaire.

Si vous aviez traité l'exception de la coupure de courant,


vous auriez économisé vos efforts pour refaire votre
présentation. Pour cela , c’est important de gérer les
exceptions dans l'ingénierie logicielle
Exceptions en JAVA
Pile d’exécution (stack)

Comment se fait l'exécution du programme dans la


mémoire ?

Pile d’exécution
Exceptions en JAVA
Pile d’exécution (stack)

Exemple de programme Java

Class Test {
Main () {
A(); Comment se déroule
Void A() { l'exécution de ce
B() programme particulier ?
}
Void B() {
System.out.println(‘hello’);
}
}
Exceptions en JAVA
Pile d’exécution (stack)

Comment se déroule l'exécution de ce programme particulier ?

Stack (Pile) n'est rien d'autre qu'une structure de données


sur un objet qui est créé en mémoire par Java.

Pile des livres


Last In First Out
Exceptions en JAVA
Pile d’exécution (stack)

Comment se déroule l'exécution de ce programme particulier ?


Contrôle du programme.

Contrôle du programme est le compteur, qui nous


indique quelle ligne de code dans notre programme est
en train de s'exécuter par la JVM.
Exceptions en JAVA
Pile d’exécution (stack)

Comment se déroule l'exécution de ce programme particulier ?


A chaque appel de méthode, Le contrôle du programme fait
une entrée dans la pile.

B()
A() A()
A()

main main main main

Hello

main
Exceptions en JAVA
Pile d’exécution (stack)

Points à retenir
● Chaque appel de méthode effectué sera stocké dans la
pile;
● Chaque entrée de la pile est connue sous le nom de
cadre de pile (Stack frame)/enregistrement d'activation
(activation record).
● Après avoir terminé chaque appel de méthode, l'entrée
est retirée de la pile.
● Une fois que chaque méthode est exécutée, la pile
devient vide et la pile est détruite par la jvm.
Exceptions en JAVA
Traitement par défaut des exceptions
Exceptions en JAVA
Traitement par défaut des exceptions
Exceptions en JAVA
Traitement par défaut des exceptions
Exceptions en JAVA
Hiérarchie des exceptions en java
Exceptions en JAVA
Hiérarchie des exceptions en java
Classe Throwable

Classe Error
Exceptions en JAVA
Hiérarchie des exceptions en java
Classe Error
Exceptions en JAVA
Exception vérifiée & non vérifiée
Exceptions en JAVA
Exception vérifiée & non vérifiée
Exceptions en JAVA
Exception vérifiée & non vérifiée
Exceptions en JAVA
Exemples
Exceptions en JAVA
Exemples
Exceptions en JAVA
Traitement des exceptions à l’aide du try…catch
Exceptions en JAVA
Traitement des exceptions à l’aide du try…catch
Exceptions en JAVA
Traitement des exceptions à l’aide du try…catch
Exceptions en JAVA
Traitement des exceptions à l’aide du try…catch
Exceptions en JAVA
Contrôle du flux dans try…catch
Exceptions en JAVA
Contrôle du flux dans try…catch
Exceptions en JAVA
Contrôle du flux dans try…catch
Exceptions en JAVA
Contrôle du flux dans try…catch
Exceptions en JAVA
Méthodes d’affichage des exceptions
Exceptions en JAVA
Méthodes d’affichage des exceptions
Exceptions en JAVA
Méthodes d’affichage des exceptions
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Blocs d'exceptions multiples
Exceptions en JAVA
Finally, Final et Finalize
Exceptions en JAVA
Finally, Final et Finalize
Exceptions en JAVA
Garbage Collector

Le Garbage Collector (Collecteur d'ordures ) en Java est le processus par lequel


les programmes Java effectuent une gestion automatique de la mémoire. Les
programmes Java sont compilés en bytecode qui peut être exécuté sur une
machine virtuelle Java, ou JVM en abrégé. Lorsque les programmes Java
s'exécutent sur la JVM, des objets sont créés sur le tas, qui est une partie de la
mémoire dédiée au programme. Au bout d'un certain temps, certains objets ne
seront plus nécessaires. Le ramasseur d'ordures trouve ces objets inutilisés et
les supprime pour libérer de la mémoire.
Exceptions en JAVA
Garbage Collector

En C/C++, le programmeur est responsable de la création et de la


destruction des objets. Habituellement, le programmeur néglige la
destruction des objets inutiles. À cause de cette négligence, à un moment
donné, il se peut qu'il n'y ait plus assez de mémoire disponible pour créer
de nouveaux objets, et le programme entier se terminera anormalement,
provoquant des OutOfMemoryErrors. Mais en Java, le programmeur n'a
pas à se soucier de tous ces objets qui ne sont plus utilisés. Le collecteur
d'ordures détruit ces objets. L'objectif principal du Garbage Collector est de
libérer la mémoire du tas en détruisant les objets inaccessibles. Le
ramasseur d'ordures est le meilleur exemple de fil Daemon, car il fonctionne
toujours en arrière-plan.
Exceptions en JAVA
Garbage Collector

Comment fonctionne le ramasse-miettes en Java ?

Le ramasse-miettes de Java est un processus automatique. Le ramassage


automatique des ordures consiste à examiner la mémoire du tas, à identifier
les objets qui sont utilisés et ceux qui ne le sont pas, et à supprimer les
objets inutilisés. Un objet utilisé, ou un objet référencé, signifie qu'une
partie de votre programme maintient toujours un pointeur sur cet objet.
Un objet inutilisé ou non référencé n'est plus référencé par aucune partie
de votre programme. La mémoire utilisée par un objet non référencé peut
donc être récupérée. Le programmeur n'a pas besoin de marquer
explicitement les objets à supprimer. L'implémentation du ramassage des
ordures se trouve dans la JVM.
Exceptions en JAVA
Finally, Final et Finalize

Finalize

Il s'agit d'une méthode que le Garbage Collector appelle toujours juste


avant la suppression/destruction de l'objet éligible au Garbage Collector,
pour effectuer une activité de nettoyage. L'activité de nettoyage signifie la
fermeture des ressources associées à cet objet comme la connexion à la
base de données, la connexion au réseau, ou nous pouvons dire la
désallocation des ressources. N'oubliez pas qu'il ne s'agit pas d'un mot-clé
réservé. Une fois que la méthode finalisée est terminée, le Garbage
Collector détruit immédiatement cet objet. La méthode finalize est présente
dans la classe Object et sa syntaxe est :
protected void finalize throws Throwable{}
Exceptions en JAVA
Finally, Final et Finalize

Finalize

Puisque la classe Object contient la méthode finalize, celle-ci est disponible


pour chaque classe Java puisque Object est la superclasse de toutes les
classes Java. Puisqu'elle est disponible pour chaque classe Java, le Garbage
Collector peut appeler la méthode finalize sur n'importe quel objet Java.
Maintenant, la méthode finalize qui est présente dans la classe Object, a
une implémentation vide, dans notre classe les activités de nettoyage sont
là, alors nous devons surcharger cette méthode pour définir nos propres
activités de nettoyage.
Exceptions en JAVA
Finalize

Cas 1 : L'objet qui est éligible pour la collecte des déchets, la méthode
finalize de la classe correspondante de cet objet va être exécutée.
Exceptions en JAVA
Finalize

Cas 1 : L'objet qui est éligible pour la collecte des déchets, la méthode
finalize de la classe correspondante de cet objet va être exécutée.
Exceptions en JAVA
Finalize
Cas 2 : Nous pouvons appeler la méthode finalize Explicitement alors elle sera
exécutée comme un appel de méthode normal, mais l'objet ne sera pas
supprimé/détruit..
Exceptions en JAVA
Finally, Final et Finalize
Exceptions en JAVA
Finally, Final et Finalize

Block try = bloc d’essai


Exceptions en JAVA
Try … catch imbriqués
Java permet d'imbriquer les instructions try catch. Vous pouvez ajouter une
instruction try catch dans le bloc try
Exceptions en JAVA
Try … catch imbriqués
vous pouvez ajouter une déclaration try catch dans le bloc catch
Exceptions en JAVA
Try … catch imbriqués
Vous pouvez ajouter une instruction try catch dans le bloc finally.
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throw
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Le mot clé throws
Exceptions en JAVA
Tableau récapitulatif
Mot clé Expilcation
try Le bloc try contient du code qui lève ou génère une exception.
catch Le bloc Catch est utilisé pour gérer le code de traitement des exceptions.
Ce code
fournit un moyen alternatif pour l'exécution du programme.
throws Nous pouvons utiliser le mot-clé throws pour déléguer la responsabilité
de la gestion des exceptions à l'appelant.
gestion des exceptions à l'appelant (il peut s'agir d'une autre méthode
ou d'un jvm). Ensuite,la méthode de l'appelant est responsable de la
gestion de cette exception.
Exceptions en JAVA
Tableau récapitulatif
Mot clé Expilcation
throw Cette méthode est utilisée pour transmettre l'objet d'exception créé au
JVM.
manuellement
finally Le bloc Finally est responsable des activités de nettoyage liées au bloc
Try.
bloc try, c'est-à-dire que toutes les ressources ouvertes dans le cadre du
bloc try seront fermées dans le bloc finally.
seront fermées dans le bloc finally
finalize la méthode finalize est responsable des activités de nettoyage liées à
l'objet, c'est-à-dire que les ressources ouvertes dans le cadre du bloc try
seront fermées dans le bloc finally.
liées à l'objet, c'est-à-dire que toutes les ressources associées à l'objet
seront désallouées avant de détruire un objet en utilisant la méthode
finalize.
Exceptions en JAVA
Points à retenir

● Nous mentionnons super() dans la classe d'exception personnalisée pour


rendre la description à la disposition du gestionnaire d'exceptions par défaut.

● Il est fortement recommandé de définir les exceptions personnalisées


comme non vérifiées. ie. Nous devons étendre RuntimeException mais pas
Exception.

● Le mot-clé Throw est le mieux adapté aux exceptions définies par


l'utilisateur ou personnalisées, mais pas aux exceptions prédéfinies.
Exceptions en JAVA
Exercice récapitulatif
Réaliser une classe pour manipuler des entiers naturels (positifs ou nuls).
La classe dispose des éléments suivants:
• Constructeur à un argument de type int ; il générera une exception
NegativeException si la valeur de son argument est négative ;
• Méthodes statiques de somme, de différence et de produit de deux naturels ;
elles généreront respectivement des exceptions SumException, DiffException et
MultiException lorsque le résultat ne sera pas représentable (<0); la limite des
valeurs des naturels sera fixée à la plus grande valeur du type int ;
• Une méthode d’accès getN pour fournir la valeur de l’entier naturel.

On s’arrangera pour que toutes les classes exception dérivent d’une classe
NaturalException et pour qu’elles permettent à un éventuel gestionnaire de
récupérer les valeurs ayant provoqué l’exception.

Écrire deux exemples d’utilisation de la classe :

1. L’un se contentant d’intercepter sans discernement les exceptions de type


dérivé de NaturalException.
2. L’autre qui explicite la nature de l’exception en affichant les informations
disponibles. Les deux exemples pourront figurer dans deux blocs try d’un même
programme.

Vous aimerez peut-être aussi