• Aucun résultat trouvé

Karima Boudaoud Karima Boudaoud

N/A
N/A
Protected

Academic year: 2022

Partager "Karima Boudaoud Karima Boudaoud"

Copied!
8
0
0

Texte intégral

(1)

Exceptions Exceptions

Karima Boudaoud Karima Boudaoud

IUT- R&T IUT- R&T

Karima Boudaoud IUT GTR-Sophia Antipolis 2

Exceptions et Erreurs Exceptions et Erreurs

Définition

les exceptions/erreurs sont utilisées pour traiter un

fonctionnement anormal d’une partie d’un code (provoqué par une erreur ou un cas exceptionnel)

Plus de mémoire libre Mauvais URL

Division par 0 Référence null...

en java, une erreur ne provoque pas l’arrêt brutal du programme mais la création d’un objet, instance d’une classe spécifiquement créée pour être associé à des erreurs/exceptions

L’ L approche maladroite (1) approche maladroite (1)

code non-spécialisé

où le traitement des erreurs est mélangé dans le code

pour le renvoi de condition d’erreur

comment retourner condition et résultat ?

mais cela est difficile à comprendre

et difficile à maintenir

L L ’approche maladroite (2) approche maladroite (2)

int codeErr = ouvrirFichier();

if (codeErr == FICHIER_INEXISTANT) {/*traiter l’erreur */}

else if (codeErr==OUVERTURE_INTERDITE){/*traiter l’err.*/}

else { // ok, fichier ouvert codeErr = lireFichier();

if (codeErr == ERREUR_DE_LECTURE) {/* traiter l’erreur

*/}

else { // ok, on l’a lu codeErr = testerFormat();

if (codeErr == FORMAT_INCONNU) {/* traiter l’erreur

*/}

else { // c’est bon, continuons ...

} } }

(2)

Karima Boudaoud IUT GTR-Sophia Antipolis 5

Spécialisation du Code (1) Spécialisation du Code (1)

le traitement des exceptions en Java inspiré par C++, pour traiter un fonctionnement anormal

en java, la java virtual machine (

JVM)

fait le travail

pour gérer les exceptions, il existe des structures spécialisées

try {...}

qui indique risque d’erreur catch () {...}

qui attrape l’erreur throw ()

qui lève l’erreur

...

ouvrirFichier();

lireFichier();

testerFormat();

...

Sortie normale

Sortie exceptionnelle en cas d'erreur

Karima Boudaoud IUT GTR-Sophia Antipolis 6

Spécialisation du Code (2) Spécialisation du Code (2)

try {

ouvrirFichier();

lireFichier();

testerFormat();

}

catch(FichierInexistant e) {/*traiter l’erreur */} catch(OuvertureInterdite e) {/* traiter l’erreur */} catch(ErreurDeLecture e) {/* traiter l’erreur */} catch(FormatInconnu e) {/* traiter l’erreur */}

Karima Boudaoud IUT GTR-Sophia Antipolis 7

Vocabulaire sur les Vocabulaire sur les erreurs/exceptions erreurs/exceptions

une instruction, une méthode peut lever ou lancer une exception : une anomalie de fonctionnement provoque la création d’une exception

une méthode peut attraper, saisir, traiter une

exception par une clause catch d’un bloc try-catch

une méthode peut laisser se propager une exception :

elle ne l’attrape pas par

une clause

catch

l’erreur «remonte» alors vers la méthode appelante qui peut elle-même l’attraper ou la laisser remonter

Karima Boudaoud IUT GTR-Sophia Antipolis 8

Signature d

Signature d’ ’une méthode une méthode

• comprend aussi le traitement d'exceptions

public static void sleep(long ms) throws InterruptedException

• code doit traiter l'exception

try {Thread.sleep(1000);}

catch(InterruptedException e) {

System.err.println("Sommeil interrompu");}

• sinon...

- FileWithGetLine.java:8: Warning: Exception

java.io.InterruptedException must be caught,or it must be declared in throws clause of this method.

Thread.sleep(1000);

^

(3)

Karima Boudaoud IUT GTR-Sophia Antipolis 9

Traitement (1) Traitement (1)

lorsqu'une Exception est levée…

le traitement linéaire s'arrête la JVM récupère la main

la JVM cherche à passer le contrôle

deux possibilités

traitement « sur place » si la méthode en est capable

catch suit try

traitement « reporté »

méthode rejette la responsabilité indiqué dans sa signature par throws

possibilité de traitement par une méthode plus douée

Karima Boudaoud IUT GTR-Sophia Antipolis 10

Traitement (2) Traitement (2)

...

try {

k = foo();

} catch (Exception e) {

// traitement de // l'exception }

...

...

void foo()throws Exception{

...

if (…) {

throw new Exception();

};

// code jamais

// exécuté si exception ...

}

La JVM récupère ...

la main et passe le contrôle

Traitement sur place (1) Traitement sur place (1)

try {

int i = m();

// à exécuter si m() n’a pas levé // d’exception

. . .

} catch (TrucException e) {

// traitement de l’exception e levée // dans la méthode m

. . . }

Traitement sur place (2) Traitement sur place (2)

le traitement général des exceptions se fait de la manière suivante :

try {

/* code à risque */

} catch (ClasseException1 e) { ...

} catch (ClasseException2 e) { ...

}

le contrôle ne passe que dans un seul bloc catch

qui correspond à la première exception levée

(4)

Karima Boudaoud IUT GTR-Sophia Antipolis 13

Erreur du débutant Erreur du débutant

try {

int n = ParseInt(args[0]);

etagere.add(livres[n]);

} catch (NumberFormatException e) {

System.err.println("Mauvais numéro de livre");

} catch (EtagerePleineException e) {

System.err.println("Etagère pleine : déjà "

+ e.etagere.contenance() + " livres");

}

n++; // provoque une erreur à la compilation

Karima Boudaoud IUT GTR-Sophia Antipolis 14

Traitement reporté Traitement reporté

c'est pas moi, c'est l'autre...

public maMéthode(long ms)

throws InterruptedException { ...

Thread.sleep(millis); // ni try ni catch ...

}

la

JVM

prend la main

cherche catch correspondant à l'exception remonte la pile de méthodes

Karima Boudaoud IUT GTR-Sophia Antipolis 15

Traitement par défaut Traitement par défaut

si aucune méthode ne traite l'exception, la JVM

affiche un message d’erreur

avec la pile des méthodes traversées par l’exception stoppe l'exécution du thread

peut planter la JVM

Karima Boudaoud IUT GTR-Sophia Antipolis 16

Création d

Création d exception (1) exception (1)

dérivation de java.lang.Exception

class MonException extends Exception {}

class MaClasse { ...

public void maMéthode() throws MonException { ...

throw new MonException();

...

} ...

}

(5)

Karima Boudaoud IUT GTR-Sophia Antipolis 17

Création d

Création d’ exception (2) exception (2)

par convention, nom se termine par Exception

class EtagerePleineException extends Exception {

private Etagere etagere;

EtagerePleineException(Etagere et) { etagere = et;

}

Etagere getEtagere() { return etagere;

} }

Karima Boudaoud IUT GTR-Sophia Antipolis 18

Utilisation de l

Utilisation de l exception exception

public class Etagere { int nbLivres = 0,

contenanceEtagere = 0;

. . .

public void ajouterLivre(Livre

livre)throws EtagerePleineException { if (nbLivres == contenanceEtagere) { throw new EtagerePleineException(this);

}

else // ajout du livre dans l’étagère . . .

} . . . }

Throwable

Error Exception

AWTException

ClassNotFoundException CloneNotSupportedException IOException

IllegalAccessException

RuntimeException

Structure hiérarchique Structure hiérarchique

...

Exceptions

« contrôlées »

Exceptions Contrôlées Exceptions Contrôlées

Exceptions dites "non-runtime"

Prévisibles et rares Traitement est rentable Traitables par l’utilisateur

héritent de la classe java.lang.Exception pas de java.lang.RuntimeException

toute méthode qui peut lancer une exception contrôlée doit la déclarer dans sa signature

public int m(double d) throws TrucException

(6)

Karima Boudaoud IUT GTR-Sophia Antipolis 21

Méthodes de la classe Méthodes de la classe

Exception Exception

toString()

existe pour tous les objets Java

catch(ArithmeticException e) {

System.out.println("exception : "

+ e + " rencontrée");

}

Karima Boudaoud IUT GTR-Sophia Antipolis 22

Méthodes de la classe

Méthodes de la classe Throwable Throwable

printStackTrace()

imprime les appels ayant conduit à lever l'exception appelée par défaut lors de l'acquittement d'une exception

par java

catch(ArithmeticException e) { e.printSTackTrace()

}

affiche les informations suivantes :

java.lang.ArithmeticException: / by zero at Vector.normalize(Vector.java: 25) at Vector.getMatrix(Vector.java: 140)…

StackTraceElement[] getStackTrace()

Karima Boudaoud IUT GTR-Sophia Antipolis 23

Exceptions

Exceptions RuntimeExeption RuntimeExeption

trop fréquentes

traitement n’en vaut pas la peine

par exemple...

ArithmeticException

ArrayIndexOfBoundsException NullPointerException

...

Karima Boudaoud IUT GTR-Sophia Antipolis 24

Erreurs :

Erreurs : java.lang. java.lang.Error Error

les erreurs indiquent des problèmes dans le système

elles ne sont pas traitables par l’utilisateur

elle peuvent être ignorées (par l’utilisateur)

(7)

Karima Boudaoud IUT GTR-Sophia Antipolis 25

Erreur du débutant Erreur du débutant

try { ...

} catch (Exception e) { ...

} catch (NumberFormatException e) { ...

} catch (EtagerePleineException e) { ...

}

// attrape tout

// jamais ici

// jamais ici

Karima Boudaoud IUT GTR-Sophia Antipolis 26

Après l

Après l’ ’exception (1) exception (1)

le bloc finally{}

exécuté quoiqu'il arrive aucune exception

exception traité dans catch exception traité ailleurs

...

try { uneMéthodeQuiJette(); } catch (ExceptionJettée e) {...}

finally {/* fait le ménage dans tous les cas

*/}

...

Après l

Après l’ exception (2) exception (2)

le bloc finally{}

utilisé principalement pour fermer des ressources

fichiers ouverts sockets

...

Exception ou Exception ou

Traitement Normal ? Traitement Normal ?

éviter d'utiliser une exception à la place d'un traitement normal

Mauvais style Coûteux

exemples :

Si on lit un fichier du début à la fin, ne pas utiliser EOFException

Si on rencontre la fin du fichier avant d'avoir lu les 10 valeurs dont on a besoin, utiliser EOFException

(8)

Karima Boudaoud IUT GTR-Sophia Antipolis 29

Exception et Constructeurs Exception et Constructeurs

lancer une exception si un constructeur n'a pu faire correctement son travail

vaut mieux une exception à la création qu’un objet défectueux créé

public Toto() throws TotoNotCreatedException {

if (pb) {

throw new TotoNotCreatedException();

} }

Karima Boudaoud IUT GTR-Sophia Antipolis 30

Quel Type d'Exception ? Quel Type d'Exception ?

faut pas lancer des erreurs (classe Error)

pour obliger une méthode à traiter le problème...

lancer une exception

mais qui n'est pas dérivée de RuntimeException lancer l'exception la plus spécifique possible au problème

Références

Documents relatifs

C’est donc dans ou de cet espace qu’est née une littérature dont « Robben Island » est devenue le symbole?. Il est important de noter que cette littérature revêt une

Par exemple, si l’on part de la partition (1,1,4) on fait disparaître les deux tas d’une carte chacun, les tas de 4 cartes est ramené à 3 cartes et on crée un nouveau tas de

Pour Henri Mintzberg (né en 1939), théoricien et auteur en management, la structure « est la somme totale des moyens employés pour diviser le travail entre tâches distinctes et

Quels sont les éléments obligatoires dans la négociation collective ?Non imposé par le code du travail : dans l’entreprise négociation imposée chaque année (salaires, durée

Vérification graphique : Utilisation de GeoGebra Il faut trouver la valeur du rayon du cylindre qui donne comme volume

Cette démarche est plus qu’un processus ou un langage, c’est une invitation constante à concentrer notre attention là où nous avons le plus de chances de trouver ce que nous

Comme il apparaît à la lecture de la légende, le coefficient de Traînée utilisé ici en ordonnée est le Coefficient de Traînée frontal en paroi, à savoir celui attaché à la

Elles sont proches du soleil = planètes rocheuses (Mercure, Vénus, Terre, Mars) Les planètes constituées essentiellement d’hydrogène et hélium. La température est plus élevée