Académique Documents
Professionnel Documents
Culture Documents
Erreurs d'exécutions
Dans tout programme, il y a des erreurs d'exécution possibles , des
cas particuliers qui n'ont pas forcément été traités. On ne vise pas à les
supprimer, mais à les controler (robustesse du code, tolérance aux
erreurs)
il s'agit d'erreurs d'exécution, pas d'erreur de programmation que le compilateur peut
détecter.
Exemple : un fichier que le programme essaie de lire est déjà utilisé par une autre
application
=> Exception
Licence Informatique - Semestre 6 - Compléments de Java 1
Un contexte
d’exécution
Le contexte
d’exécution qui
attrape l’exception
1
Exceptions - Sérialisation
Exceptions en Java
Checked exceptions : exceptions déclarées, traitées ou propagées par
le code (comportement exceptionnel mais prévu). Le compilateur vérifie
que les méthodes ne lèvent que les exceptions déclarées pour la classe.
Throwable
Exception Error
...
RuntimeException
... StackOverFlowErrorOutOfMemoryError
NullPointerException ArithmeticException...
Licence Informatique - Semestre 6 - Compléments de Java 3
2
Exceptions - Sérialisation
}
System.out.println(e.getMessage());
ExceptionTest1
catch(ParseException e){
e.printStackTrace(System.out);
}
catch(IOException e){
System.out.println("Problème d'accés fichier");
} ExceptionTest2
finally{
// optionnel. Bloc exécuté quelque soit les cas (exception levée ou pas). Il sert à faire le
// ménage, fermer des fichiers ouverts dans le bloc try par exemple
}
Un seul bloc catch est exécuté, le premier rencontré qui correspond au type de
l'exception. Attention : si on essaie de récupérer une exception déjà récupérée
dans un bloc catch précédent (surclassée par exemple), le compilateur gueule
(il ne sait plus quel traitement appliquer)
Licence Informatique - Semestre 6 - Compléments de Java 5
Exceptions et constructeurs
Si une exception est levée dans un constructeur, l'objet n'est pas
créé. Cela permet de contrôler les paramètres du constructeur
public class GroupeEtudiants{
3
Exceptions - Sérialisation
public ButtonException(){
super("Button clicked");
}
C’est très mauvais d’utiliser les exceptions pour modifier l’ordre d’exécution
dans une situation normale (ralentissement, non sérialisation des
comportements, ...)
Trouver la fin d’un flux est tout à fait normal, ce n’est pas une erreur!
try {
for (;;) process (stream.next());
}
catch(ExceptionType1 e){...}
...
finally{stream.close();}
4
Exceptions - Sérialisation
Sérialisation (1/3)
Sérialisation (2/3)
5
Exceptions - Sérialisation
Sérialisation (3/3)
MyPoint
this.x = x;this.y= y;
this.name = name;
}
Licence
} Informatique - Semestre 6 - Compléments de Java 12
6
Exceptions - Sérialisation
Clonage
Principe du clonage : construire un objet identique à un objet
donné vis-à-vis de son état (valeurs des attributs).
l'objet clone est un nouvel objet, il n'a pas la même adresse mémoire
Motivations pour un clonage :
préserver un objet sensible en ne transmettant qu'une copie de cet objet
préserver l'état d'un objet avant un traitement pour pouvoir revenir à l'état
initial
créer un objet à moindre coût (par exemple si l'appel au constructeur d'un
objet exécute une requête sur une base de données)
attribut2
Objet C
clonage de
Objet A' attribut4 ...
surface attribut1
attribut2
attribut2
Objet C'
attribut4 ...
7
Exceptions - Sérialisation
Méthode clone
En fait, Object clone() est une méthode (protégée) d'Object
par défaut, elle crée un objet de même classe que l'objet sur lequel elle est
appelée et affecte au nouvel objet les attributs (non static) de l'objet original
(clonage de surface)
elle déclenche une CloneNotSupportedException si la classe de l'objet
n'implémente pas l'interface Cloneable
Clonage et héritage :
redéfinition de clone() pour cloner les nouveaux attributs (si nécessaire)
appel de super.clone() pour créer les attributs de la super-classe
ne pas utiliser les constructeurs dans clone!! (on veut souvent l'éviter
justement)
8
Exceptions - Sérialisation