FACULTE DES SCIENCES DE SFAX
Département d’informatique et des Communications
Année Universitaire : 2023-2024
Matière : Java 2
Filière : LISI3
Enseignante : Amal BEN HAMIDA
TD 1 : Les Exceptions en Java
EXERCICE 1 :
o Question 1 : On considère que l’exécution instruction2 lève une exception dans le
bloc try-catch
1 try {
2 instruction1;
3 instruction2;
4 instruction3;
5 } catch (Exception1 ex1) {
6 // ...
7 } catch (Exception2 ex2) {
8 // ...
9 }
10 instruction4;
a) L’instruction instruction3 sera-t-elle exécutée ?
b) Si l’exception n’est pas attrapée, l’instruction instruction4 sera-t-elle exécutée ?
c) Si l’exception est attrapée dans un des blocs catch, l’instruction instruction4 sera-
t-elle exécutée ?
d) Si l’exception est passée à la méthode appelante, l’instruction instruction4 sera-t-
elle exécutée ?
o Question 2 : On considère que l’exécution instruction2 lève une exception dans le
bloc try-catch
1 try {
2 instruction1;
3 instruction2;
4 instruction3;
5 } catch (Exception1 ex1) {
6 // ...
7 } catch (Exception2 ex2) {
8 // ...
9 } catch (Exception3 ex3) {
10 throw ex3;
11 } finally {
12 instruction4;
13 }
14 instruction5; 1
a) L’instruction instruction5 sera-t-elle exécutée si l’exception n’est pas attrapée ?
b) Si l’exception levée est de type Exception3, l’instruction instruction4 sera-t-elle
exécutée ? l’instruction instruction5 sera-t-elle exécutée ?
EXERCICE 2 :
Complétez le programme suivant pour que les erreurs susceptibles de se produire soient
gérées.
import [Link];
import [Link].*;
class Exceptions1{
static int division(int[] tab, int indice, int diviseur){
return tab[indice]/diviseur;
}
public static void main(String[] args){
int[] tableau = {17, 12, 15, 38, 29, 157, 89, -22, 0, 5};
int x, y;
Scanner sc = new Scanner([Link]);
[Link]("Entrez l’indice de l’entier à diviser: ");
x= [Link]([Link]());
[Link] ("Entrez le diviseur: ");
y = [Link]([Link]());
[Link]
EXERCICE 4: ("Le résultat de la division est: ");
[Link] (division(tableau,x,y));
}
Soit
} la classe Temps suivante :
EXERCICE 3 :
1) Ecrire une classe Pile qui implémente une pile d’objets avec un tableau de taille fixe. On
définira pour cela deux exceptions PilePleine et PileVide. On utilisera pour écrire les
méthodes, l’exception ArrayOutOfBoundsException qui indique qu’on a tenté
d’accéder à une case non définie d’un tableau.
Les champs de la classe seront :
private final static int taille = 10;
private Object [] pile;
private int pos;
2) Ecrire une méthode main qui empile les arguments de la ligne de et qui les réécrit dans
l’ordre inverse. On aura par exemple :
> java Pile 1 2 3 4 5 6 7 8 9 10 11 12 13
10 9 8 7 6 5 4 3 2 1
2
EXERCICE 4 :
Soit la classe Temps suivante :
Class Temps
{
Private int heures,
private int minutes;
private int secondes;
Temps (int h, int m, int s){
heures=h;
minutes=m;
secondes=s;
}
public static void main (String
[] args){
Temps t= new Temps (23,12,61);
}
}
1) Écrire la déclaration de la classe TempsException qui permettra d'instancier une
exception dès que les valeurs des heures, minutes ou secondes ne sont pas valides.
2) Modifier le constructeur de cette classe de manière à ce qu’il lance une exception de type
TempsException si les heures, les minutes ou les secondes ne correspondent pas à un
temps valide.
3) Modifier le code de la méthode main de manière à ce que l'exception TempsException
soit traitée en affichant le message suivant : "Temps invalide".
EXERCICE 5 :
On souhaite gérer les exceptions afin de s'assurer que la longueur du rayon d’un cercle est bien
un réel positif. Dans le cas où l'on donnera une valeur négative, la longueur du rayon du cercle
sera initialisée à son opposé.
Les étapes à suivre sont les suivantes :
1) Écrire la déclaration de la classe ValRayonValideException qui permettra d'instancier
une exception dès qu'une longueur de rayon négative sera donnée.
2) Écrire la déclaration de la classe CouleurValideException qui permettra d'instancier
une exception dès que la couleur est un objet nul ou de longueur nul ou de couleur rouge.
3) Construire la classe Cercle en gérant correctement le code de ses méthodes qui peuvent
produire des exceptions.
4) Tester la classe Cercle dans la fonction main.
Le squelette de la classe Cercle est donné par :
private double x, y, rayon; (x, y) est le centre du cercle dont le rayon est
donné par rayon.
private String couleur; La couleur du cercle
3
public Cercle(double x, double Constructeur de la classe
y, double rayon, String
couleur)
public double getRayon()
public String getCouleur()
public void setRayon(double Fonction permettant de modifier la valeur du
newRayon) rayon du cercle. Si la valeur du nouveau rayon
donnée par newRayon est négative alors une
exception de type
ValRayonValideException est levée et
traitée.
public void setCouleur(String Fonction permettant de modifier la couleur du
newCouleur) cercle courant, en gérant des exceptions de
type NullPointerException si le
paramètre newCouleur est nul ou s'il est une
chaine de caractères vide ou si newCouleur
est de couleur rouge ceci en utilisant la classe
CouleurValideException
public String toString() Fonction permettant d'afficher les
caractéristiques du cercle courant