Vous êtes sur la page 1sur 5

Prepa A2 Programmation Orientée Objet 2

TD n° 5
(Exceptions)

Exercice 1 :
Somme des arguments de la ligne de commande
1-Ecrire une classe Somme qui permet d’afficher la somme des nombres réels donnés en argument de la ligne
de commande.
Par exemple, « java Somme 10 15.5 4 » affiche 29.5.
2-L’exécution de java Somme 10 x 3 affiche ce qui suit dans le terminal :
Exception in thread "main" java.lang.NumberFormatException: For input string: "x"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at Somme.main(Somme.java:8)
Expliquer comment interpréter cet affichage pour comprendre ce qu’il s’est passé.
3-Modifier la classe Somme pour afficher la somme de tous les arguments de la ligne de commande en ignorant
ceux qui ne sont pas réels. On indiquera le nombre de données ignorées.
> java Somme 10 x 3 y
13.0
Nombre de données ignorées : 2
> java Somme 10 3
13.0

Exercice 2 :
Toutou est une classe avec deux propriétés privées String nom et int nombrePuces. Ecrire un constructeur
public Toutou (String n, int np) qui propage des exceptions de type IllegalArgumentException lorsque le nom n
est null ou lorsque le nombre de puces np est négatif.
Utiliser ce constructeur dans une méthode main pour contrôler les appels new Toutou ("milou", 4) et new
Toutou ("medor", -11) et afficher les erreurs éventuelles lors de l’exécution des constructeurs.
Exécution :

Mohamed Amine MARNISSI ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

création d’un premier toutou


le voici : milou a 4 puces.
creation d’un second toutou
un toutou rate !! java.lang.IllegalArgumentException: nombre negatif de puces !
Exercice3 :

Ecrire une classe Pile qui implémente une pile de String avec un tableau de taille fixe. Définir pour cela deux
exceptions PilePleine et PileVide. Utiliser 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 String [] pile;
private int pos;

Ecrire une méthode main qui empile les arguments de la ligne de commande et qui les réécrit dans l’ordre
inverse.

Exercice4 :

1. Que fait le programme suivant ?


class Essai1Exception extends Exception{
Essai1Exception (String s){ super(s); }
}
class Essai2Exception extends Essai1Exception{
Essai2Exception (String s){ super(s); } }
class Exn{
static void throwEssais(int i) throws Exception {
switch(i){
case 1:
System.out.println("Lancement de Essai1Exception");
throw new Essai1Exception("Essai1Exception de throwEssais");
case 2: System.out.println("Lancement de Essai2Exception");
throw new Essai2Exception("Essai2Exception de throwEssais");
default: System.out.println("Lancement de Exception");
throw new Exception("Exception de throwEssais");
}
}
public static void main(String[] args){
for(int i=1; i<=3;i++){
try{ throwEssais(i);}
catch(Essai2Exception e){
System.out.println("Catch Essai2 : "+e.getMessage());
}

Mohamed Amine MARNISSI ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

catch(Essai1Exception e){
System.out.println("Catch Essai1 : "+e.getMessage());
}
catch(Exception e){
System.out.println("Catch Exception : "+e.getMessage());
}
finally{
System.out.println("Finally de main");
}
}
}
}

2- Et celui-ci ?

class Essai1Exception extends Exception{


Essai1Exception (String s){
super(s);
}
}
class Essai2Exception extends Essai1Exception{
Essai2Exception (String s){
super(s);
}
}
class Exn{
static void throwEssais(int i) throws Exception {
switch(i){
case 1:
System.out.println("Lancement de Essai1Exception");
throw new Essai1Exception("Essai1Exception de
throwEssais");
case 2:
System.out.println("Lancement de Essai2Exception");
throw new Essai2Exception("Essai2Exception de
throwEssais");
default:
System.out.println("Lancement de Exception");
throw new Exception("Exception de throwEssais");
}
}
public static void main(String[] args){
for(int i=1; i<=3;i++){
try{ throwEssais(i);}
catch(Essai1Exception e){
System.out.println("Catch Essai1 : "+e.getMessage());

Mohamed Amine MARNISSI ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

}
catch(Essai2Exception e){
System.out.println("Catch Essai2 : "+e.getMessage());
}
catch(Exception e){
System.out.println("Catch Exception : "+e.getMessage());
}
finally{
System.out.println("Finally de main");
}
}
}
}

Exercice 5 :

Exécutez la classe suivante, et expliquez la raison de son comportement.


import java.io.*;
public class Except1 {
public void methodeA(String args[]) {
System.out.println(" methodeA : debut");
try {
System.out.println(" methodeA : appel de methodeB");
this.methodeB(args);
System.out.println(" methodeA : retour de methodeB");
if (args.length > 99)
throw new IOException();
}
catch (IOException e) {
System.out.println(" methodeA : capture : "+ e);
}
finally {
System.out.println(" methodeA : execute finally");
}
System.out.println(" methodeA : fin");
}

public void methodeB(String args[]) {


System.out.println(" methodeB : debut");
try {
System.out.println(" methodeB : tente d’acceder a args[99]");
String s = args[99];
System.out.println(" methodeB : a reussi a acceder a args[99]");
}
catch (ArrayIndexOutOfBoundsException e) {

Mohamed Amine MARNISSI ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

System.out.println(" methodeB : capture : "+ e);


} finally {
System.out.println(" methodeB : execute finally");
}
System.out.println(" methodeB : fin");
}
public static void main(String args[]) {
System.out.println("main : debut");
Except1 ex = new Except1();
try {
System.out.println("main : appel de methodeA");
ex.methodeA(args);
System.out.println("main : retour de methodeA");
}
catch (Exception e) {
System.out.println("main : capture : "+e);
}
System.out.println("main : fin");
}
}

Mohamed Amine MARNISSI ISSAT Sousse

Vous aimerez peut-être aussi