Exercices Java - Gestion des Exceptions
Exercice 1: Gestion des Exceptions dans un Zoo
Question : Décrire le comportement de chaque cas lorsque la méthode verifierSituation
est appelée avec les valeurs 1, 2 et toute autre valeur. Énumérer les messages affichés dans chaque bloc try
, catch
et finally
.
class AnimalAbsentException extends Exception {
public AnimalAbsentException(String message) {
super(message);
}
}
class AnimalEnDangerException extends AnimalAbsentException {
public AnimalEnDangerException(String message) {
super(message);
}
}
class Zoo {
static void verifierSituation(int situation) throws Exception {
switch (situation) {
case 1:
System.out.println("Vérification : Animal absent");
throw new AnimalAbsentException("L'animal demandé est absent.");
case 2:
System.out.println("Vérification : Animal en danger");
throw new AnimalEnDangerException("L'animal est en danger !");
default:
System.out.println("Vérification : Problème générique");
throw new Exception("Problème générique dans le zoo.");
}
}
public static void main(String[] args) {
for (int situation = 1; situation <= 3; situation++) {
try {
verifierSituation(situation);
} catch (AnimalEnDangerException e) {
System.out.println("Catch AnimalEnDangerException : " + e.getMessage());
} catch (AnimalAbsentException e) {
System.out.println("Catch AnimalAbsentException : " + e.getMessage());
} catch (Exception e) {
System.out.println("Catch Exception : " + e.getMessage());
} finally {
System.out.println("Fin de la vérification de la situation dans le zoo.");
}
}
}
}
Exercice 2: Vérification des Nombres
Question : Indiquer ce qui se passe lorsque les nombres saisis comportent des valeurs négatives impaires et/ou lorsque la somme des nombres dépasse 5000. Écrire le message affiché pour chaque situation.
import java.util.Scanner;
class InvalidNumberException extends Exception {
public InvalidNumberException(String message) {
super(message);
}
}
class Number {
public void verifierNombres(int[] nombres) throws InvalidNumberException {
int somme = 0;
for (int n : nombres) {
if (n < 0 && n % 2 != 0) {
throw new InvalidNumberException("Erreur : Le nombre " + n + " est impair et négatif.");
}
somme += n;
}
if (somme > 5000) {
throw new InvalidNumberException("Erreur : La somme des nombres dépasse 5000. Somme = " + somme);
}
}
}
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nombres = new int[10];
System.out.println("Entrez 10 nombres :");
for (int i = 0; i < 10; i++) {
System.out.print("Nombre " + (i + 1) + ": ");
nombres[i] = sc.nextInt();
}
Number v = new Number();
try {
v.verifierNombres(nombres);
System.out.println("Les nombres saisis sont valides.");
} catch (InvalidNumberException e) {
System.out.println(e.getMessage());
} finally {
sc.close();
System.out.println("Fin du programme.");
}
}
}
Exercice 3: Vérification des Entiers
Question : Écrire les messages affichés lorsque la valeur saisie est supérieure à 10, inférieure à 5, et entre les deux.
import java.util.Scanner;
class CustomException extends Exception {
public int n;
public CustomException(int n) { this.n = n; }
}
public class Chemin {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n;
System.out.print("Entrez un nombre entier : ");
n = scanner.nextInt();
try {
if (n > 10) throw new CustomException(n);
} catch (CustomException e) {
System.out.println("Catch 1 - n est supérieur à 10 : n = " + e.n);
}
try {
if (n < 5) throw new CustomException(n);
} catch (CustomException e) {
System.out.println("Catch 2 - n est inférieur à 5 : n = " + e.n);
}
System.out.println("Fin du programme");
scanner.close();
}
}
Exercice 4: Exceptions avec Switch-Case
Question : Décrire le comportement du programme pour les valeurs -1, 1, 0, et un nombre non spécifié.
import java.util.Scanner;
class PositiveNumberException extends Exception {
public PositiveNumberException(String message) { super(message); }
}
public class SwitchCaseWithPositiveException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Entrez un entier : ");
int n = scanner.nextInt();
switch (n) {
case 0:
System.out.println("Le nombre est zéro.");
break;
case 1:
try {
verifierPositif(n);
System.out.println(n + " est positif.");
} catch (PositiveNumberException e) {
System.out.println("Exception capturée : " + e.getMessage());
}
break;
case -1:
try { verifierPositif(n); }
catch (PositiveNumberException e) {
System.out.println("Exception capturée : " + e.getMessage());
}
break;
default:
try { verifierPositif(n); }
catch (PositiveNumberException e) {
System.out.println("Exception capturée : " + e.getMessage()); }
break;
}
scanner.close();
}
public static void verifierPositif(int n) throws PositiveNumberException {
if (n > 0) { throw new PositiveNumberException("Erreur : " + n + " est un nombre positif."); }
}
}
Exercice 5: Traitement des Exceptions Personnalisées
Question : Quelles sont les différentes exceptions lancées lorsque la méthode traiterDonnees
est appelée avec des données invalides ? Décrivez chaque message d'erreur.
class DonneeInvalideException extends Exception {
public DonneeInvalideException(String message) {
super(message);
}
}
class DonneeVideException extends DonneeInvalideException {
public DonneeVideException(String message) {
super(message);
}
}
public class TraitementDonnees {
public void traiterDonnees(String data) throws DonneeInvalideException {
if (data == null) {
throw new DonneeInvalideException("Erreur : Donnée est nulle.");
}
if (data.isEmpty()) {
throw new DonneeVideException("Erreur : Donnée est vide.");
}
System.out.println("Traitement des données : " + data);
}
public static void main(String[] args) {
TraitementDonnees td = new TraitementDonnees();
String[] donnees = {null, "", "Donnée valide"};
for (String data : donnees) {
try {
td.traiterDonnees(data);
} catch (DonneeInvalideException e) {
System.out.println(e.getMessage());
}
}
}
}
Exercice 6: Gestion des Exceptions avec Input/Output
Question : Quelle est la sortie du programme si le fichier n'existe pas ou si les droits d'accès sont insuffisants ?
import java.io.*;
public class FichierTest {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("fichier_inexistant.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (FileNotFoundException e) {
System.out.println("Exception : Fichier non trouvé.");
} catch (IOException e) {
System.out.println("Exception : Erreur de lecture du fichier.");
} finally {
System.out.println("Fin de l'opération de lecture.");
}
}
}
Exercice 7: Utilisation de Multiple Exceptions
Question : Que se passe-t-il lorsque des exceptions différentes sont lancées dans des blocs try
distincts ? Décrire la sortie pour chaque scénario.
public class MultipleExceptions {
public static void main(String[] args) {
try {
int a = 10 / 0; // division par zéro
} catch (ArithmeticException e) {
System.out.println("Catch ArithmeticException : " + e.getMessage());
}
try {
String str = null;
str.length(); // NullPointerException
} catch (NullPointerException e) {
System.out.println("Catch NullPointerException : " + e.getMessage());
}
System.out.println("Fin du programme.");
}
}
Exercice 8: Création d'une Exception Personnalisée
Question : Que se passe-t-il si une entrée non valide est saisie lors de la création d'un objet ? Décrire le message d'erreur affiché.
class AgeInvalideException extends Exception {
public AgeInvalideException(String message) {
super(message);
}
}
class Personne {
private String nom;
private int age;
public Personne(String nom, int age) throws AgeInvalideException {
this.nom = nom;
if (age < 0) {
throw new AgeInvalideException("Erreur : L'âge ne peut pas être négatif.");
}
this.age = age;
}
public void afficherDetails() {
System.out.println("Nom : " + nom + ", Age : " + age);
}
}
public class TestPersonne {
public static void main(String[] args) {
try {
Personne p = new Personne("Alice", -5);
p.afficherDetails();
} catch (AgeInvalideException e) {
System.out.println(e.getMessage());
}
}
}
Exercice 9: Exceptions et Boucles
Question : Que se passe-t-il si une exception se produit dans la boucle ? Décrire comment l'exécution est affectée.
public class BoucleAvecExceptions {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
try {
if (i == 3) {
throw new Exception("Exception lancée à i = " + i);
}
System.out.println("i = " + i);
} catch (Exception e) {
System.out.println("Catch Exception : " + e.getMessage());
}
}
System.out.println("Fin de la boucle.");
}
}
Exercice 10: Exception de Classe Abstraite
Question : Comment la gestion des exceptions fonctionne-t-elle avec des classes abstraites ? Décrire le comportement du programme.
abstract class ExceptionAbstraite extends Exception {
public ExceptionAbstraite(String message) {
super(message);
}
}
class ExceptionConcrete extends ExceptionAbstraite {
public ExceptionConcrete(String message) {
super(message);
}
}
public class TestAbstraite {
public static void main(String[] args) {
try {
throw new ExceptionConcrete("Erreur avec une exception concrète.");
} catch (ExceptionAbstraite e) {
System.out.println("Catch ExceptionAbstraite : " + e.getMessage());
}
}
}