Chapitre 0: Exception et G n ricit
1. Exception
1. D finitions
La notion dexception est offerte aux programmeurs Java pour r soudre de mani re efficace et simple le probl me de la gestion des erreurs mises lors de lex cution dun programme.
Une exception est un signal qui indique quun v nement anormal est survenu dans un programme
- La r cup ration (le traitement) de lexception permet au programme de continuer son ex cution.
- Une exception est un signal d clench par une instruction et trait par une autre
+ Il faut quun objet soit capable de signaler ou lever (throw) une exception un autre objet
+ Il faut que lautre objet puisse saisir (catch) une exception afin de la traiter Lorsque lexception se produit le contr le est transf r un gestionnaire dexceptions
- S paration de lex cution normale de lex cution en cas de condition anormale
Exemple
Tester cet exemple en modifiant la valeur de j par 0
public class TestException {
public static void main(java.lang.String[] args) {
int i = 3; int j = 1;
try {
System.out.println("r sultat = " + (i / j));
Publicité
}
catch (ArithmeticException e) { System.out.println("erreur division par z ro");
}
}
}
Une m thode qui d sire g rer ce genre de probl mes peut indiquer quelle est dispos e intercepter lexception (instruction throws).
Les exceptions pr d finies
- + - En Java, les exceptions sont de v ritables objets.
- Ce sont des instances de classes qui h ritent de la classe Throwable.
- Lorsquune exception est lev e, une instance de la classe Throwable est cr e.Voici un aper u de la hi rarchie des classes pour les exceptions.

Erreurs et Exceptions
- Erreur: indications de probl mes irr cup rables dus au mat riel ou au syst me dexploitation
- Exception: erreurs r siduelles dans le programme qui peuvent tre trait es par une sortie propre ou une r cup ration (arithm tique, pointeurs, index, i/o, etc.)
- Les instances de la classe Error sont des erreurs internes la machine virtuelle Java. Elles sont rares et fatales.
- Les sous-classes de la classe Exception sont r parties en deux cat gories :
- Les exceptions dex cution (runtime) sont souvent leffet du manque de robustesse du code. Par exemple lexception NullPointerException est lev e lorsque lon manipule un objet non instanci (oubli de linstruction new) ;
- Les autres exceptions correspondent des v nements anormaux chappant au contr le du programme. Par exemple, lexception EOFException est lev e si on essaie de lire au-del dun fichier.
Q Traiter les exceptions lev es : les mots cl s try, catch et finally :

Q Intercepter une exception : le mot cl throws : Si une m thode est susceptible de lever une exception et si elle ne peut pas la traiter, elle se doit de pr venir le syst me qu'elle relaye cette t che. Pour ce faire, on utilise le mot cl throws dans la d finition de la m thode. Ce mot cl permet d'avertir le syst me qu'une certaine cat gorie d'exception ne sera pas trait e en local (dans l'exemple suivant, l'ensemble des exceptions li es aux entr es/sorties).
public void ma\_methode (int x) throws IOEXception {
&
Publicité
}
Q Il est galement possible de d signer linterception de plusieurs exceptions :
public void ma\_methode (int x) throws IOException, EOFException{
&
}
- 1. Les Exceptions d finies par lutilisateur
Jusqu pr sent on parl des exceptions pr d finies qui se d clenchent toutes seules. Java offre au programmeur la possibilit de d finir ses propres exceptions. Ces exceptions doivent h riter dune autre exception de la hi rarchie des classes Java. Le programmeur doit lui-m me lever ses exceptions.
Pour se faire Java met sa disposition le mot-cl throw ( ne pas confondre avec throws). Pour le reste (try, catch, finally) le m canisme est identique.

Exemple
Voici un exemple avanc r alis par l diteur Jbuilder, cest en fait une interface utilisateur qui permet linsertion dune date, en faisant les contr les n cessaires pour afficher lintitul du jour.


Appel lexception
public static void controlmois(int jour,int mois) throws SaisieDateException { if (mois<1||mois>12)
{ throw new SaisieDateException("Mois invalid."); }
Publicité
else{
if((mois==4||mois==6||mois==9||mois==11)&&(jour==31)){
throw new SaisieDateException("le jour du mois est invalid.");
}
else if(mois==2&&(jour==31||jour==30)){
throw new SaisieDateException("le jour du mois est invalid.");
}
}
D claration de lexception
public class SaisieDateException extends Exception { public SaisieDateException(String s) {
super(s);
}
1. G n ricit
1. D finition
La g n ricit permet de param trer une classe ou interface avec un ou plusieurs types de donn es.
On peut par exemple donner en param tre le type des l ments dun Arraylist: ArrayList<T>
Publicité
T est un param tre de type formel (ou plus simplement param tre de type) ou variable de type T sera remplac par un argument de type pour typer des expressions ou cr er des objets :
ArrayList<Integer> l = new ArrayList<Integer>();
- 1. Exemple
Partie 1 : Sans la G n ricit
soit la classe Paire qui permet de travailler avec nimporte quel type de donn e. ! (data:image/png;base64...)! (data:image/png;base64...)Remarque
 Si nous voulons utiliser les donn es de lobjet Paire, il va falloir faire un casting
 Certaines erreurs ne sont d tect es qu lex cution du programme (Casting du Type Double sur cha ne de caract re)
Partie 2 : Avec la G n ricit
Nous allons reprendre notre classe Paire en la rendant g n rique : ! (data:image/png;base64...)
 Le T nest d fini qu linstanciation de la classe Paire :
! (data:image/png;base64...)Remarque
 Avec la G n ricit , on a limit lutilisation du casting (pas intuitif)
 Les erreurs ont t d tect es d s la compilation