0% ont trouvé ce document utile (0 vote)
7 vues65 pages

Gestion des exceptions en Java

Le document traite des exceptions en Java, expliquant leur définition, les types d'exceptions, et les méthodes de gestion comme try/catch. Il aborde également la généricité, en définissant des classes et méthodes paramétrées, ainsi que les objets prédéfinis comme java.lang.Object, les tableaux, et les wrappers. Enfin, il présente les chaînes de caractères, en détaillant les classes String et StringBuffer.

Transféré par

zahraelamssane
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues65 pages

Gestion des exceptions en Java

Le document traite des exceptions en Java, expliquant leur définition, les types d'exceptions, et les méthodes de gestion comme try/catch. Il aborde également la généricité, en définissant des classes et méthodes paramétrées, ainsi que les objets prédéfinis comme java.lang.Object, les tableaux, et les wrappers. Enfin, il présente les chaînes de caractères, en détaillant les classes String et StringBuffer.

Transféré par

zahraelamssane
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd

Plan

 Exceptions
 Générique
 Autres notions de java

2
Plan

 Exceptions
 Générique
 Autres notions de java

3
Exception

 Définition : Une exception est un événement, se


produisant lors de l’exécution d’un programme, qui
interrompt l’enchaînement normal des instructions.
o Ouverture d’un fichier qui n’existe pas

o Faire une division par zero


Exception
 Objets exceptions
 Lorsqu’une erreur se produit dans une méthode, celle-ci crée un

objet Exception qui contient des informations sur l’erreur survenue :


o le type de l’erreur : objet null, dépassement de tableau, etc.
o la trace d’exécution du programme : la stack trace

 L’action de créer un objet Exception et de le passer au système


d’exécution est appelée lever/lancer une exception
« throwing an exception »
5
Exception
 Les exceptions : Mais c’est quoi une exception

6
Exception
 Deux types d’ exceptions

 Les exceptions surveillées (checked exception)


La gestion est requise.
 Les exceptions non surveillées (unchecked exception)
La gestion à priori est impossible.

7
Exception

8
Quelques exceptions prédéfinies

 Division par zéro pour les entiers : ArithmeticException


 Tentative de forçage de type illégale : ClassCastException
 Référence nulle : NullPointerException
 Tentative de création d'un tableau de taille négative :
NegativeArraySizeException
 Dépassement de limite d'un tableau :
ArrayIndexOutOfBoundsException
9
Exception
 Gestion des exceptions
 Lorsqu’une exception est levée, le système d’exécution

tente de trouver un handler pour cette exception (une méthode


pouvant la gérer)

 Gerer une execption avec Try…catch…Finally

 Transferer la gestion de l’exception avec Throws

 Créer ses propres exceptions


10
Exception

 Solution 1 : gestion active avec try/catch


« Essaie ce bout de code, si une exception survient
attrape la et exécute le code de remplacement ».

 Syntaxe :
try
{ // instructions hasardeuses }
catch ( IOException e )
{ // que faire si une exception de type IOException survient }
catch ( NullPointerException e )
{ // que faire si une exception de type NullPointerException survient }
finally
{ // toujours faire ceci }
Exception
 Les exceptions : capturer et attraper
 Lorsqu’un bloc génère une erreur elle doit être

interceptée et levée
 Un bloc d’instruction peut être surveillé
 Attraper avec l’instruction try
 Gérer avec l’instruction catch
try {
//bloc d’instruction
} catch (Type1 id1) {

//instruction à faire en cas d’erreur de type 1


12
}
Exception
 Les exceptions : capturer et attraper
 S’il y a plusieurs types d’exceptions
à intercepter, il faut définir autant de catch que de
type d’exceptions
try {
//bloc d’instruction
} catch (Type1 id1) {

//instruction à faire en cas d’erreur de type1


} catch (Type2 id2) {

//instruction à faire en cas d’erreur de type2


} catch (Type3 id3) {

//instruction à faire en cas d’erreur de type3


} 13
Exception
 Les exceptions : capturer et attraper
try {
//bloc d’instruction
} catch (Type1 id1) {

//instruction à faire en cas d’erreur de type1


} catch (Type2 id2) {

//instruction à faire en cas d’erreur de type2


} catch (Type3 id3) {

//instruction à faire en cas d’erreur de type3


} [finally {

// facultatif
}]

 Un type d’exception donnée ne doit pas venir


14
après un type d’une exception d’une super classe.
Exception
 Les exceptions : capturer et attraper
try {
//bloc d’instruction
} catch (Type1 | Type2 | Type3 id3) {

//instruction à faire en cas d’erreur de type3


} [finally {

// facultatif
}

 Attention à l’ordre des catch : du plus spécialisé


vers le plus générale

15
Exception
 Exemple 1
import [Link];
:
class Test {
public static void main(String[] args) {

String reponse = [Link]("Quel est votre age ?");

try {
int age = [Link](reponse);
[Link]("Vous avez " + age + " ans");

} catch (NumberFormatException e) {
[Link](null, "Probleme de format");
}
}
}
Exception

• Sans l’instruction try catch, ce programme


aurait planté ! Le système aurait affiché :

17
Exception

 Solution 2 : gestion passive avec throws


o Transferer la gestion de l’exception avec Throws dans la
signature
« Ce mot clé permet d’avertir le système qu’une exception
peut se déclencher dans le corps de la méthode mais que son
traitement n’est pas local : Déléguer le traitement »
Exception
import [Link];

class Util {
public static void lire() throws NumberFormatException {
String reponse = [Link]("Quel est votre age ?");
int age = [Link](reponse);
[Link]("Vous avez " + age + " ans");
}
}

class AppliUtil {

public static void main(String[] args) {


try {
[Link]();
} catch (NumberFormatException e) {
[Link]("Probleme de format"); }
}
} 19
Exception

 Créer ses propres exceptions

« Pour créer sa propre classe d’exception, il suffit donc de


créer une classe qui hérite de [Link] ou de
l’une de ses classes filles »
Exception

21
Exception

 Un mot pour conclure

«Il ne faut employer les exceptions que dans des situations


exceptionnelles ! Elles ne doivent pas remplacer un simple
test ! »
Plan

 Exceptions
 Générique
 Autres notions de java

23
Généricité
Définition : La généricité permet de définir des
classes, ou des méthodes paramétrées par une ou
plusieurs autres classes.
 La généricité apporte souplesse et robustesse dans le code

 La généricité apporte une complexité importante


o Utiliser les classes génériques existantes n'est pas compliqué

o Créer ses propres classes génériques est plus difficile


Généricité
Définition : La généricité permet de définir des
classes, ou des méthodes paramétrées par une ou
plusieurs autres classes.
Généricité
 Généricité des classes
Généricité
 Généricité des méthodes
Généricité
 La généricité et l’héritage

 Pas de relation d'héritage entre Paire<Super> et Paire<Sous>


oPaire<Super> pSup = new Paire<Super>();
o Paire<Sous> pSous = new Paire<Sous>();
o pSup = pSous ; // INTERDIT
Généricité
 Généricité et joker (wildcard : ?)

Supposons que nous définissions dans la classe X une


autre méthode pour afficher des paires de Super, de la
façon suivante :
Généricité
 Généricité et joker (wildcard : ?)
 Pour que la dernière instruction soit possible il faudrait
définir la méthode afficheS de la façon suivante :

 Mais dans ce cas tout est possible, et si on veut se


limiter aux classes qui dérivent de Super :
Généricité

 Les jokers peuvent être limités vers le haut (extends) ou


vers le bas (super).

o <?> désigne un type inconnu

o <? extends C> désigne un type inconnu qui est soit C


soit un sous-type de C
o <? super C> désigne un type inconnu qui est soit C
soit un sur-type de C
où C peut être une classe, une interface ou un paramètre de type
Plan

 Exceptions
 Générique
 Objet prédéfinis
o [Link]
o Chaines de caractères
o Les tableaux
o Les Wrappers
32
Plan

 Exceptions
 Générique
 Objet prédéfinis
o [Link]
o Les tableaux
o Les Wrappers
o Chaines de caractères
33
La classe Objet
• Classe mère de toutes les classes. Possède des
méthodes de base qu'il est possible de redéfinir :
– toString()
– equals() & hashCode()
– getClass()
– clone()
– finalize()
Tests d’égalité
 Les opérateurs de comparaison == et != tests les
valeurs des variables
o Pour les types primitifs, on teste leurs valeurs

o Pour les types objets, on teste les valeurs leurs


références
La méthode equals()

 Il existe déja une méthode equals(Object) dans Object


o Mais son implantation teste les références

 Pour comparer structurellement deux objet, il faut


redéfinir le code de la méthode equals()
La méthode equals()
• On utilise instanceof qui renvoie vrai si une
référence est d'un type particulier

• null instanceof WhatYouWant renvoie false


int hashCode()

 Renvoie un entier qui peut être utilisé comme


valeur de hachage de l'objet
hashcode et equals

 Tout objet redéfinissant equals doit redéfinir hashcode


si l'objet doit être utilisé dans une Collection
 equals et hashcode doivent vérifier
o equals est symétrique, transitive, réflexive

o x. equal s( y) implique x. hashcode( ) ==y. hashcode( )

Les valeurs de hashcode doivent être différentes pour


chaque objet de programme
 hashcode doit être rapide à calculer
Class<?> getClass()

o Permet d'obtenir un objet Class représentant la classe


d'un objet particulier
o Un objet Class est un objet qui correspond à la classe de
l'objet à l'exécution

o Cette méthode est final


Le clonage
o Le clonage permet la copie d'un objet java.
o Pour pouvoir être cloné, un objet doit implanter
l'interface « [Link] ».
o La méthode « clone » de la classe objet permet le
clonage d'un objet champs par champs.
o Les champs statiques ne sont pas clonés.

Si un objet clonable contient un autre objet clonable,


celui-ci ne sera pas automatiquement cloné.
Implementation de clone: cas simple
Implementation de clone : cas difficile
void finalize()
 Méthode appelé juste avant que l'objet soit réclamé par le GC

 Cette méthode est protected et peut lever une exception


wait()/notify()

 wait() permet d'attendre sur le verrou associé à


l'objet.

 notify() permet de libérer quelqu'un en attente


sur le verrou associé à l'objet

 Pour plus d'infos, voir cours sur la concurrence


Les tableaux

 Il existe deux types de tableaux :


o Les tableaux d'objets, héritant de Object[], ils contiennent
des référence sur des objets
o Les tableaux de types primitifs, héritant de Object, ils
contiennent des types primitifs
 Tous les tableaux implantent les interfaces Cloneable
et Serializable
Plan

 Exceptions
 Générique
 Objet prédéfinis
o [Link]
o Les tableaux
o Les Wrappers
o Chaines de caractères
47
Initialisation et accès
 Syntaxes d'initialisation :
o new type[taille]
o new type[]{valeur1,valeur2,...,valeurn-1}

 [] permet d'accèder en lecture/écriture

 L'accès est protégé (pas de buffer overflow) et


les tableaux sont tous mutables
Longueur et boucle

 Les tableaux sont utilisables dans une boucle


foreac

 .length sur un tableau permet d'obtenir sa taille


Type primitif et Objet

 Il existe des classes wrapper (enveloppes) qui


permettent de voir un type primitif comme un objet

 Cela permet de réutiliser un code marchant pour des


objets avec des types primitifs
Plan

 Exceptions
 Générique
 Objet prédéfinis
o [Link]
o Les tableaux
o Les Wrappers
o Chaines de caractères
51
Les wrappers

 Un wrapper est juste un objet stockant un type primitif


Conversion type primitif/wrapper
 Les wrappers possèdent deux méthodes qui
permettent de faire la conversion entre un type
primitif et le wrapper
Hiérarchie des wrappers
 Les relations de sous-typage entre les wrappers
ne sont pas les mêmes que celles des types
primitifs associés
Auto boxing/unboxing
 En fait, la conversion est automatique
Auto boxing/unboxing
 Les conversions de boxing/unboxing sont faites
avant les conversions classiques mais pas après
Plan

 Exceptions
 Générique
 Objet prédéfinis
o [Link]
o Les tableaux
o Les Wrappers
o Chaines de caractères
57
Les chaînes de caractères

58
Les chaînes de caractères

59
Les chaînes de caractères : String

60
Les chaînes de caractères : String
o int length()
o char charAt(int index)
o int indexOf(char c)
o int indexOf(String subStr)
o int lastIndexOf(char c)
o int lastIndexOf(String subStr)
o String replace(char oldChar, char newChar)
o String substring(int start)
o String substring(int start, int end)
o … voir la documentation de Java

61
Les chaînes de caractères : String

62
Les chaînes de caractères : StringBuffer

• Du package [Link]
• Contrairement à String est mutable
• Permet de créer une créer une chaîne de
caractères par morceaux
• Création :
StringBuffer = new StringBuffer (32) ;
StringBuffer = new StringBuffer ("Allo") ;

63
Les chaînes de caractères : StringBuffer

64
Les chaînes de caractères : StringBuffer

• StringBuffer append(String s)
• int capacity()
• StringBuffer delete (int start, int end)
• StringBuffer insert (int offset, String s)
• StringBuffer reverse ()
• String subString (int start, int end)
• String toString ()

65
Fin

66

Vous aimerez peut-être aussi