DR ZOTCHI GIOVANI – CHAP8 JAVA – [Link].
FR
Chapitre 8 : Packages, Exceptions et Gestion des Erreurs.
Jusqu'à présent, nous avons écrit du code en supposant que tout se passerait bien. Mais dans le
monde réel, les fichiers manquent, les utilisateurs saisissent du texte au lieu de nombres, et les
connexions réseau lâchent. Ce chapitre vous apprend à organiser votre code et, surtout, à
empêcher votre programme de "planter" lamentablement face aux imprévus.
Chapitre 8 : Packages, Exceptions et Gestion des Erreurs
8.1 Les Packages : Organiser et structurer son code
Imaginez votre ordinateur sans aucun dossier, avec tous vos fichiers en vrac sur le bureau. Ce
serait le chaos. En Java, c'est la même chose : on utilise des packages pour ranger nos classes
dans des "dossiers" logiques.
8.1.1 Le mot-clé package
La toute première ligne d'un fichier .java (avant même les imports) doit déclarer à quel
package appartient la classe.
Java
package [Link]; // Déclaration du package
public class Produit {
// Code de la classe
}
Convention de nommage : Les noms de packages sont toujours en minuscules et utilisent
souvent le nom de domaine de l'entreprise à l'envers pour garantir leur unicité (ex:
[Link]).
8.1.2 Le mot-clé import
Si vous êtes dans le package [Link] et que vous voulez utiliser la classe Produit qui
se trouve dans [Link], vous devez l'importer.
Java
package [Link];
import [Link]; // Importation spécifique
import [Link]; // Importation d'une classe standard de Java
public class Main {
public static void main(String[] args) {
Produit p = new Produit();
}
}
💡 Astuce Eclipse : Utilisez le raccourci Ctrl + Shift + O (Organize Imports) pour qu'Eclipse
ajoute automatiquement tous les import manquants et supprime ceux qui sont inutilisés !
1
DR ZOTCHI GIOVANI – CHAP8 JAVA – [Link]
8.2 Les Exceptions : Qu'est-ce que c'est ?
Une exception est un événement anormal qui survient pendant l'exécution du programme et
qui perturbe son flux normal. Si elle n'est pas gérée, le programme s'arrête brutalement (il
"plante") et affiche un texte rouge effrayant dans la console (la stack trace).
8.2.1 La hiérarchie des erreurs en Java
Tout part de la classe mère Throwable. Elle se divise en deux grandes familles :
1. Error : Ce sont des problèmes graves liés à la machine virtuelle (JVM), comme un
manque de mémoire (OutOfMemoryError). En général, on ne peut pas et on ne doit
pas essayer de les gérer. Le programme doit s'arrêter.
2. Exception : Ce sont des problèmes liés à la logique de l'application ou à
l'environnement (fichier introuvable, division par zéro). C'est ce que nous devons
gérer.
8.2.2 Checked vs Unchecked Exceptions
Parmi les Exception, Java fait une distinction stricte :
Exceptions non vérifiées (Unchecked - RuntimeException) : Ce sont souvent des
erreurs de programmation logique (ex: NullPointerException,
ArrayIndexOutOfBoundsException). Le compilateur ne vous oblige pas à les gérer.
C'est à vous de corriger votre code.
Exceptions vérifiées (Checked) : Ce sont des erreurs imprévisibles échappant au
contrôle du programmeur (ex: IOException si un fichier est supprimé par l'utilisateur,
SQLException si la base de données est hors ligne). Le compilateur vous oblige à les
gérer, sinon votre code refusera de compiler.
8.3 Gérer les Exceptions : try, catch, finally
Pour empêcher le programme de planter, on "capture" l'exception avec un bloc try-catch.
8.3.1 Le bloc try-catch
try : Contient le code "risqué" qui pourrait déclencher une erreur.
catch : Contient le code de secours à exécuter si (et seulement si) l'erreur se produit.
Java
import [Link];
import [Link];
public class DivisionSecurisee {
public static void main(String[] args) {
Scanner scanner = new Scanner([Link]);
try {
// Code risqué
[Link]("Entrez un nombre : ");
int nombre = [Link]();
2
DR ZOTCHI GIOVANI – CHAP8 JAVA – [Link]
int resultat = 100 / nombre;
[Link]("Résultat : " + resultat);
} catch (ArithmeticException e) {
// Ce bloc s'exécute si l'utilisateur tape 0
[Link]("Erreur : La division par zéro est
impossible !");
} catch (InputMismatchException e) {
// Ce bloc s'exécute si l'utilisateur tape du texte au lieu
d'un nombre
[Link]("Erreur : Vous devez saisir un nombre entier
!");
}
[Link]("Le programme continue normalement ici...");
[Link]();
}
}
8.3.2 Le bloc finally
Le bloc finally se place après les catch. Son code s'exécute toujours, qu'il y ait eu une
erreur ou non. Il est crucial pour "nettoyer" les ressources (fermer un fichier, fermer une
connexion réseau, ou fermer un Scanner).
Java
try {
// Ouverture et lecture d'un fichier...
} catch (Exception e) {
// Gestion de l'erreur...
} finally {
// S'exécute TOUJOURS
[Link]("Fermeture du fichier pour libérer la mémoire.");
}
8.4 Lancer et Déléguer des Exceptions : throw et throws
Parfois, ce n'est pas à votre méthode de gérer l'erreur, mais à la méthode qui l'a appelée.
8.4.1 Déléguer avec throws
On utilise throws dans la signature de la méthode pour prévenir : "Attention, cette méthode
est dangereuse, elle peut renvoyer telle exception. À celui qui l'appelle de se débrouiller !".
Java
// La méthode prévient qu'elle peut lancer une Exception
public void lireFichier(String chemin) throws IOException {
// Code qui lit le fichier (peut échouer si le fichier n'existe pas)
}
8.4.2 Lancer manuellement avec throw
On utilise throw (sans "s") à l'intérieur du code pour déclencher délibérément une exception,
souvent pour faire respecter une règle métier.
3
DR ZOTCHI GIOVANI – CHAP8 JAVA – [Link]
Java
public class Compte {
private double solde = 100.0;
public void retirer(double montant) {
if (montant > solde) {
// On déclenche manuellement une exception !
throw new IllegalArgumentException("Fonds insuffisants !");
}
solde -= montant;
}
}
8.5 Créer ses propres Exceptions personnalisées
Si les exceptions standard de Java ne suffisent pas à décrire votre problème métier, vous
pouvez créer les vôtres. Il suffit de créer une classe qui hérite de Exception (pour forcer la
vérification) ou de RuntimeException.
Java
// 1. Création de l'exception personnalisée
public class SoldeInsuffisantException extends Exception {
public SoldeInsuffisantException(String message) {
super(message); // On passe le message à la classe mère Exception
}
}
// 2. Utilisation
public void payer(double prix) throws SoldeInsuffisantException {
if (prix > [Link]) {
throw new SoldeInsuffisantException("Transaction refusée : solde
trop bas.");
}
// ... suite du code
}
Avec ce chapitre, vous avez maintenant les clés pour créer des applications Java robustes qui
ne s'effondrent pas à la moindre erreur utilisateur ou défaillance système.