Académique Documents
Professionnel Documents
Culture Documents
Programmation Java
Manuel du stagiaire - Volume II
D53983FR11
Edition 1.1
Octobre 2009
D61458
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2009, Oracle. Tous droits rservs.
Avertissement
Cette documentation contient des informations qui sont la proprit d'Oracle
Corporation et sont protges par les lois relatives aux droits d'auteur et la proprit
intellectuelle. Vous ne pouvez copier et imprimer ce document qu' des fins
d'utilisation personnelle lors de la participation une formation dispense par Oracle.
Le document ne peut tre modifi ou altr en aucune manire. A l'exception des cas
o l'utilisation faite du document s'inscrit dans le respect des lois relatives aux droits
d'auteur, vous ne pouvez pas utiliser, partager, tlcharger, copier, imprimer, afficher,
excuter, reproduire, publier, breveter, diffuser, transmettre ou distribuer ce
document, en partie ou en totalit, sans l'autorisation expresse d'Oracle.
Les informations fournies dans ce document sont susceptibles de modification sans
pravis. Par ailleurs, Oracle Corporation ne garantit pas qu'elles soient exemptes
d'erreurs et vous invite, le cas chant, lui en faire part par crit l'adresse
suivante : Oracle University, 500 Oracle Parkway, Redwood Shores, California 94065
USA
Restrictions applicables au gouvernement amricain :
Restricted Rights Notice
If this documentation is delivered to the United States Government or anyone using
the documentation on behalf of the United States Government, the following notice is
applicable:
U.S. GOVERNMENT RIGHTS
The U.S. Governments rights to use, modify, reproduce, release, perform, display,
or disclose these training materials are restricted by the terms of the applicable
Oracle license agreement and/or the applicable U.S. Government contract.
Marques
Oracle est une marque dpose d'Oracle Corporation et/ou de ses filiales. Tout autre
nom de produit ou de socit peut tre une marque de son propritaire.
Auteur
Kate Heap
Rvisions et
contributions techniques
Ken Cooper
Clay Fuller
Taj Islam
Peter Laseau
Yvonne Price
Rdacteurs
Daniel Milne
Joyce Raftery
Concepteur graphique
Satish Bettegowda
Editeurs
Pavithran Adka
Nita Brozowski
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
iii
Table des matires
I Introduction
Objectifs I-2
Prsentation du cours I-3
1 Prsentation des plates-formes Java et Oracle
Objectifs 1-2
Qu'est-ce que Java ? 1-3
Principaux avantages du langage Java 1-5
Approche oriente objet 1-7
Modles de conception 1-8
Modle de conception MVC 1-9
Indpendance par rapport la plate-forme 1-10
Utiliser Java dans un environnement Internet d'entreprise 1-11
Utiliser la JVM (Java Virtual Machine) 1-13
Fonctionnement de la JVM 1-15
Avantages des compilateurs JIT 1-17
Implmentation de la scurit dans l'environnement Java 1-19
Dploiement d'applications Java 1-21
Utiliser Java avec Oracle 11g 1-22
Kit SDK (Software Development Kit) Java 1-23
Utiliser le kit de dveloppement appropri 1-25
Java SE 6 1-26
Environnement de dveloppement intgr 1-27
Synthse 1-28
2 Conventions lmentaires relatives au code et la syntaxe Java
Objectifs 2-2
Composants du toolkit 2-4
Packages Java 2-5
Documentation l'aide de Java SE 2-6
Contenu d'un fichier source Java 2-8
Conventions d'appellation 2-9
Informations complmentaires sur les conventions d'appellation 2-11
Dfinir une classe 2-13
Exemple : Classe Rental 2-14
Crer des blocs de code 2-16
Dfinir des mthodes Java 2-17
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
iv
Exemple de mthode 2-18
Dclarer des variables 2-19
Exemples de variables dans le contexte d'une mthode 2-20
Rgles de cration des instructions 2-21
Compiler et excuter une application Java 2-22
Dboguer un programme Java 2-23
Variable CLASSPATH 2-24
Exemples d'utilisation de CLASSPATH 2-25
Synthse 2-26
Prsentation de l'exercice 2 : Syntaxe Java lmentaire et
conventions de codage 2-27
Diagramme UML de l'application OrderEntry 2-28
3 Explorer les types de primitive et les oprateurs
Objectifs 3-2
Mots-cls et mots rservs 3-3
Types de variable 3-4
Types de primitive 3-5
Variables 3-7
Dclarer des variables 3-8
Variables locales 3-9
Dfinir des noms de variable 3-10
Littraux numriques 3-11
Littraux non numriques 3-13
Oprateurs 3-15
Catgories d'oprateurs 3-16
Utiliser l'oprateur d'affectation 3-17
Oprateurs arithmtiques 3-18
Informations complmentaires sur les oprateurs arithmtiques 3-19
Exercice dirig : Dclarer des variables 3-20
Examiner les conversions 3-22
Incrmenter et dcrmenter des valeurs 3-24
Oprateurs relationnels et oprateurs d'galit 3-25
Oprateur conditionnel (?:) 3-26
Oprateurs logiques 3-27
Oprateurs d'affectation composs 3-28
Priorit des oprateurs 3-29
Informations complmentaires sur la priorit des oprateurs 3-30
Concatner des chanes 3-31
Synthse 3-32
Prsentation de l'exercice 3 : Explorer les types de primitive et les oprateurs 3-33
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
v
4 Contrler le flux du programme
Objectifs 4-2
Types lmentaires de contrle de flux 4-3
Utiliser le contrle de flux en Java 4-4
Instruction if 4-5
Instructions if imbriques 4-6
Exercice dirig : Identifier les erreurs 4-7
Instruction switch 4-8
Informations complmentaires sur l'instruction switch 4-9
Boucles en Java 4-10
Boucle while 4-12
Boucle dowhile 4-13
Boucle for 4-14
Informations complmentaires sur la boucle for 4-15
Exercice dirig : Identifier les erreurs 4-16
Instruction break 4-17
Instruction continue 4-18
Synthse 4-19
Prsentation de l'exercice 4 : Contrler le flux d'un programme 4-20
5 Dvelopper des applications avec Oracle JDeveloper (11g)
Objectifs 5-2
Oracle JDeveloper (11g) 5-3
Environnement Oracle JDeveloper (11g) 5-4
Navigateur d'applications 5-6
Projets 5-8
Crer des lments JDeveloper 5-10
Crer une application 5-11
Page Project Properties : Dfinir les dtails d'un projet 5-13
Page Project Properties : Slectionner des bibliothques supplmentaires 5-14
Ajouter une nouvelle dfinition Java SE 5-15
Structure de rpertoires 5-16
Examiner le squelette d'une l'application Java 5-17
Rechercher des mthodes et des champs 5-18
Dveloppement assist de code avec les outils Profiler et CodeCoach 5-19
Fonctionnalits de l'diteur de code 5-20
Refactoring 5-22
Utiliser Javadoc 5-25
Systme d'aide de JDeveloper 5-26
Obtenir de l'aide sur un sujet 5-27
Dbogueur Oracle JDeveloper 5-28
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
vi
Points d'arrt 5-30
Fentres de dbogage 5-32
Excuter un programme ligne par ligne 5-33
Examiner les donnes et les variables 5-34
Synthse 5-35
Prsentation de l'exercice 5 : Programmer en Java l'aide
d'Oracle JDeveloper 11g 5-36
6 Crer des classes et des objets
Objectifs 6-2
Programmation oriente objet 6-3
Classes et objets 6-5
Distinction entre classes et objets 6-6
Les objets sont modliss sous forme d'abstractions 6-7
Encapsulation 6-8
Hritage 6-9
Polymorphisme 6-10
Exercice dirig : Rechercher les oprations et les attributs 6-11
Classes Java 6-12
Comparer les classes et les objets 6-13
Crer des objets 6-14
Oprateur new 6-15
Variables de primitive et variables d'objet 6-16
Rfrence null 6-17
Affecter des rfrences 6-18
Dclarer des variables d'instance 6-19
Accder aux variables d'instance public 6-20
Dfinir des mthodes 6-21
Appeler une mthode 6-22
Indiquer les arguments d'une mthode : Exemples 6-23
Renvoyer une valeur partir d'une mthode 6-25
Appeler des mthodes d'instance 6-26
Encapsulation en langage Java 6-27
Transmettre des primitives des mthodes 6-28
Transmettre des rfrences objet aux mthodes 6-29
Packages Java 6-30
Regrouper des classes dans un package 6-31
Dfinir le CLASSPATH avec des packages 6-32
Modificateurs d'accs 6-34
Prsentation de l'exercice 6 : Crer des classes et des objets 6-36
Composants JavaBean 6-37
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
vii
Informations complmentaires sur les composants JavaBean 6-38
Grer les proprits des composants JavaBean 6-39
Exposer les proprits et les mthodes 6-40
Crer et utiliser un composant JavaBean dans JDeveloper 6-41
Synthse 6-42
7 Cycle de vie des objets et classes internes
Objectifs 7-2
Surcharger une mthode 7-3
Utiliser la rfrence this 7-5
Initialiser les variables d'instance 7-6
Variables de classe 7-7
Initialiser des variables de classe 7-8
Mthodes de classe 7-9
Exercice dirig : Mthodes de classe ou mthodes d'instance 7-10
Exemples de mthodes Java static 7-11
Constructeurs 7-12
Dfinir et surcharger des constructeurs 7-13
Partager du code entre des constructeurs 7-14
Variables, mthodes et classes final 7-15
Nettoyage de la mmoire 7-16
Mthode finalize() 7-17
Classes internes 7-19
Classe interne anonyme 7-21
Classe Calendar 7-23
Effectuer des calculs avec la classe Calendar 7-24
Synthse 7-27
Prsentation de l'exercice 7 : Classes de cycle de vie des objets 7-28
8 Utiliser les chanes
Objectifs 8-2
Les chanes en langage Java 8-3
Crer des chanes 8-4
Concatner des chanes 8-5
Effectuer des oprations sur les chanes 8-6
Effectuer d'autres oprations sur les chanes 8-7
Comparer des objets String 8-8
Gnrer des chanes partir d'autres objets 8-10
Gnrer des chanes partir de primitives 8-11
Gnrer des primitives partir de chanes 8-12
Mthodes de conversion des classes wrapper 8-13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
viii
Modifier le contenu d'une chane 8-14
Classes de formatage 8-16
Formater les dates 8-17
Sous-classe DecimalFormat 8-19
Utiliser DecimalFormat pour la localisation 8-21
Exercice dirig 8-23
Expressions rgulires 8-25
Identifier les chanes correspondant une expression rgulire 8-26
Remplacer et fractionner des chanes 8-27
Correspondance de modle de recherche 8-28
Syntaxe des expressions rgulires 8-29
Correspondance de modle de recherche : Etapes 8-31
Exercice dirig 8-33
Synthse 8-35
Prsentation de l'exercice 8 : Utiliser des chanes, des classes StringBuffer,
des classes wrapper et des classes de formatage de texte 8-36
9 Utiliser des flux pour les E/S
Objectifs 9-2
Flux 9-3
Jeux de classes d'E/S 9-4
Coder les E/S 9-5
Difficults lies au codage des E/S en Java 9-6
Flux binaires 9-7
Classe InputStream 9-9
Classe OutputStream 9-10
Utiliser des flux binaires 9-11
Flux d'E/S alphanumriques 9-13
Utiliser des flux alphanumriques 9-15
Classe InputStreamReader 9-17
Classe OutputStreamWriter 9-18
Concepts de base : Sortie standard 9-19
Classes PrintStream et PrintWriter 9-20
Sortie formate 9-22
Indicateurs de format 9-23
Exercice dirig 9-25
Concepts de base : Entre standard 9-26
API Scanner 9-28
E/S distance 9-29
Flux de donnes 9-31
Flux d'objets 9-32
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
ix
Srialisation d'objets 9-33
Flux de srialisation, interfaces et modificateurs 9-36
Classe IOException 9-37
Synthse 9-39
Prsentation de l'exercice 9 : Utiliser des flux pour les E/S 9-40
10 Hritage et polymorphisme
Objectifs 10-2
Principaux composants orients objet 10-3
Exemple d'hritage 10-5
Utiliser l'hritage en langage Java 10-6
Dfinir l'hritage l'aide d'Oracle JDeveloper 10-8
Variables de sous-classe et de superclasse 10-9
Initialisation par dfaut 10-10
Rfrence Super() 10-11
Exemple d'utilisation de la rfrence Super() 10-12
Utiliser des constructeurs de superclasse 10-13
Dsigner des mthodes supplmentaires 10-15
Redfinir les mthodes de la superclasse 10-17
Appeler les mthodes de la superclasse 10-19
Exemple de polymorphisme en langage Java 10-20
Traiter une sous-classe comme sa superclasse 10-21
Explorer les rfrences de superclasse avec Oracle JDeveloper 10-22
Afficher une hirarchie 10-23
Acme Video et le polymorphisme 10-24
Utiliser le polymorphisme dans le cas d'Acme Video 10-25
Oprateur instanceof 10-27
Limiter les mthodes et les classes avec final 10-29
Garantir l'hritage authentique 10-31
Synthse 10-32
Prsentation de l'exercice 10 : Hritage et polymorphisme 10-33
11 Tableaux et collections
Objectifs 11-2
Tableaux 11-3
Crer un tableau de primitives 11-4
Dclarer un tableau 11-5
Crer un objet tableau 11-6
Initialiser les lments d'un tableau 11-8
Crer un tableau de rfrences objet 11-9
Initialiser les objets d'un tableau 11-10
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
x
Utiliser un tableau de rfrences objet 11-11
Passer en revue les lments d'un tableau 11-12
Tableaux et exceptions 11-13
Tableaux plusieurs dimensions 11-14
Transmettre des paramtres de ligne de commande main() 11-15
Java Collections Framework 11-16
Hirarchie des interfaces Java Collections Framework 11-17
Composants de Java Collections Framework 11-18
Interface Collection et classe AbstractCollection 11-19
Interface Iterator 11-20
Ensembles 11-22
Classe HashSet 11-23
Classe LinkedHashSet 11-25
Classe TreeSet 11-27
Listes 11-29
Classe ArrayList 11-30
Modifier une collection ArrayList 11-31
Accder une collection ArrayList 11-32
Classe LinkedList 11-33
Mappes 11-35
Types de mappe 11-36
Exemple d'utilisation des mappes 11-37
Synthse 11-39
Prsentation de l'exercice 11 : Utiliser les tableaux et les collections 11-40
12 Utiliser des types gnriques
Objectifs 12-2
Types gnriques 12-3
Dclarer des classes gnriques 12-5
Utiliser les classes gnriques 12-6
Mthodes gnriques 12-7
Caractres gnriques 12-9
Types bruts 12-11
Elimination de type 12-12
Synthse 12-13
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xi
13 Structurer le code l'aide de classes abstraites et d'interfaces
Objectifs 13-2
Classes abstraites 13-3
Crer des classes abstraites 13-5
Mthodes abstraites 13-6
Dfinir des mthodes abstraites 13-7
Dfinir et utiliser des interfaces 13-8
Exemples d'interfaces 13-9
Crer des interfaces 13-10
Comparaison entre interfaces et classes abstraites 13-11
Implmenter des interfaces 13-12
Tri : Exemple concret 13-13
Prsentation des classes 13-14
Fonctionnement du tri 13-15
Interface Sortable 13-16
Classe Sort 13-17
Classe Movie 13-18
Utiliser le tri 13-19
Utiliser instanceof avec des interfaces 13-20
Synthse 13-21
Prsentation de l'exercice 13 : Structurer le code l'aide de classes abstraites
et d'interfaces 13-22
14 Gnrer et dtecter les exceptions
Objectifs 14-2
Qu'est-ce qu'une exception ? 14-3
Traitement des exceptions par Java 14-4
Avantages des exceptions Java : Sparation du code de gestion des erreurs 14-5
Avantages des exceptions Java : Remonter les erreurs dans la pile d'appels 14-7
Avantages des exceptions Java : Les exceptions ne peuvent pas
tre ignores 14-8
Exceptions contrles, exceptions non contrles et erreurs 14-9
Traiter les exceptions 14-11
Dtecter et traiter les exceptions 14-12
Dtecter une exception unique 14-14
Dtecter plusieurs exceptions 14-15
Nettoyer l'aide d'un bloc finally 14-16
Exercice dirig : Dtecter et traiter les exceptions 14-17
Laisser une exception se transmettre la mthode appelante 14-19
Gnrer des exceptions 14-20
Crer des exceptions 14-21
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xii
Dtecter une exception et gnrer une autre exception 14-22
Synthse 14-23
Prsentation de l'exercice 14 : Gnrer et dtecter les exceptions 14-24
15 Utiliser JDBC pour accder la base de donnes
Objectifs 15-2
Java, Java EE, et Oracle 11g 15-3
Se connecter une base de donnes avec Java 15-4
JDBC (Java Database Connectivity) 15-5
Prparer l'environnement 15-6
Procdure d'utilisation de JDBC pour excuter des instructions SQL 15-7
Etape 1 : Enregistrer le pilote 15-8
Se connecter la base de donnes 15-9
Pilotes Oracle JDBC : Pilote pour les clients lgers 15-10
Pilotes Oracle JDBC : Pilote de client OCI 15-11
Choisir le pilote appropri 15-12
Etape 2 : Obtenir une connexion de base de donnes 15-13
URL JDBC 15-14
URL JDBC avec pilotes Oracle 15-15
Etape 3 : Crer une instruction 15-16
Utiliser l'interface Statement 15-17
Etape 4a : Coder l'instruction d'interrogation 15-18
Objet ResultSet 15-19
Etape 4b : Excuter des instructions LMD 15-20
Etape 4b : Excuter des instructions LDD 15-21
Etape 5 : Traiter les rsultats de l'interrogation 15-22
Mettre en correspondance des types de la base de donnes
avec des types Java 15-23
Etape 6 : Nettoyer les ressources 15-25
Exemple d'interrogation de base 15-26
Grer une instruction SQL inconnue 15-27
Traiter les exceptions 15-28
Transactions avec JDBC 15-29
Objet PreparedStatement 15-31
Crer un objet PreparedStatement 15-32
Excuter un objet PreparedStatement 15-33
Objet DataSource 15-34
Avantages des objets DataSource 15-35
Utiliser un objet OracleDataSource pour la connexion une base
de donnes 15-36
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xiii
Optimisation des accs la base de donnes via la concentration
des connexions 15-38
Concentration des connexions 15-40
Synthse 15-43
Prsentation de l'exercice 15 : Utiliser JDBC pour accder la base
de donnes 15-44
16 Conception d'interface graphique : Utiliser Swing pour planifier la prsentation
d'une application
Objectifs 16-2
Classes AWT, Swing et JFC 16-3
Fonctionnalits de Swing 16-5
Composants lgers et composants lourds 16-6
Planifier la prsentation de l'interface graphique 16-7
La hirarchie de conteneurs Swing 16-8
Conteneurs de premier niveau 16-10
Conteneurs intermdiaires 16-12
Composants atomiques 16-14
Prsentation des gestionnaires de prsentation 16-15
Gestionnaire Border 16-17
Gestionnaire GridBag 16-18
Contraintes du gestionnaire GridBag 16-19
Utiliser les gestionnaires de prsentation 16-21
Associer des gestionnaires de prsentation 16-23
Classes de cadres Java 16-24
Conteneurs JPanel 16-26
Cadres internes 16-28
Ajouter des composants avec Oracle JDeveloper 16-29
Crer un cadre 16-30
Ajouter des composants 16-31
Prsentation la carte 16-33
Synthse 16-35
Prsentation de l'exercice 16 : Utiliser Swing pour planifier la prsentation
d'une application 16-36
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xiv
17 Ajouter des composants d'interface graphique et la gestion des vnements
Objectifs 17-2
Composants Swing 17-3
Composants Swing dans JDeveloper 17-5
Appeler l'diteur d'interface graphique 17-7
Ajouter un composant un panneau 17-8
Modifier les proprits d'un composant 17-9
Code gnr par JDeveloper 17-10
Crer un menu 17-12
Utiliser l'diteur de menu de JDeveloper 17-13
Prsentation de l'exercice 17-1 : Ajouter des composants
d'interface graphique 17-14
Interface graphique de l'application OrderEntry 17-15
Le modle Java de gestion des vnements 17-16
Notions fondamentales relatives au code de gestion des processus
d'coute d'vnement 17-17
Processus de gestion des vnements : Enregistrement 17-18
Processus de gestion des vnements : L'vnement se produit 17-20
Processus de gestion des vnements : Excuter le gestionnaire
d'vnements 17-21
Utiliser des classes d'adaptateur pour les processus d'coute 17-22
Architecture MVC de Swing 17-23
Mthodes lmentaires des composants de type texte 17-26
Mthodes lmentaires des composants JList 17-27
Quels sont les vnements qu'un composant peut gnrer ? 17-28
Dfinir un gestionnaire d'vnements dans JDeveloper 17-29
Style par dfaut du code de gestion des vnements gnr
par JDeveloper 17-31
Complter la mthode de gestionnaire d'vnements 17-31
Synthse 17-32
Prsentation de l'exercice 17-2 : Ajouter le code de gestion des vnements 17-33
18 Deployer des applications Java
Objectifs 18-2
Crer des packages et dployer des projets Java 18-3
Dployer un fichier .jar 18-4
Dployer des applications avec JDeveloper 18-5
Crer le profil de dploiement 18-6
Slectionner les fichiers dployer 18-8
Crer le fichier d'archive et le dployer 18-10
Crer un fichier .jar excutable 18-11
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xv
Java Web Start 18-13
Avantages de Web Start 18-14
Excuter une application Web Start 18-15
Examiner le fichier JNLP 18-16
Dployer une application pour Java Web Start l'aide de JDeveloper 18-17
Etape 1 : Gnrer les profils de dploiement et l'archive de l'application 18-18
Etape 2a : Dmarrer le serveur 18-19
Etape 2b : Tester la connexion 18-20
Etape 3 : Utiliser l'assistant Java Web Start pour crer un fichier JNLP 18-21
Etape 4 : Archiver et dployer l'application sur le serveur WebLogic 18-22
Synthse 18-23
Annexe A : Exercices
Annexe B : Rappels sur le langage Java
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
xvi
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Tableaux et collections
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire comment crer des tableaux de primitives et
d'objets
traiter les variables de ligne de commande
grer des groupes d'objets l'aide de Java Collections
Framework
Objectifs du chapitre
Ce chapitre traite de la manipulation de groupes de primitives et d'objets. La premire partie
explique comment crer et utiliser des tableaux. La seconde partie du chapitre prsente Java
Collections Framework et l'utilisation de ses diffrentes interfaces pour rpondre diffrents
besoins.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-3
Copyright 2008, Oracle. Tous droits rservs.
Tableaux
Un tableau est une collection de variables de mme type.
Chaque lment peut contenir une seule donne.
Les donnes peuvent tre des primitives ou des
rfrences objet.
La longueur du tableau est dtermine au moment de sa
cration.
1
2
4
8
[0]
[1]
[2]
[3]
Action
Comedy
Drama
[0]
[1]
[2]
Tableaux
Les tableaux sont utiles lorsque vous souhaitez regrouper des objets manipuler globalement.
Par exemple, si vous crivez un programme destin permettre aux utilisateurs de rechercher
un film, vous pouvez consigner la liste des catgories de films dans un tableau.
La diapositive ci-dessus prsente un tableau de quatre nombres entiers et un tableau de trois
chanes. Les diapositives suivantes expliquent la cration et l'initialisation des tableaux.
Comme vous le verrez, un tableau Java est un objet.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-4
Copyright 2008, Oracle. Tous droits rservs.
Crer un tableau de primitives
1. Dclarez le tableau.
type est une primitive, comme int, etc.
2. Crez l'objet tableau.
3. Initialisez les lments du tableau (facultatif).
Null
arrayName
arrayName
1
2
4
0
0
0
arrayName
type[] arrayName;
ou
type arrayName[];
// Create array object syntax
arrayName = new type[size];
Crer un tableau de primitives
1. Dclaration : Crez la variable qui rfrence le tableau.
2. Cration : Crez un objet tableau du type et de la taille requis. Placez ensuite une
rfrence ce tableau dans la variable de tableau cre prcdemment.
3. Initialisation : Initialisez les lments du tableau en leur attribuant les valeurs
souhaites. Cette tape est facultative pour un tableau de primitives, car les lments sont
initialiss avec des valeurs par dfaut lors de la cration de l'objet tableau.
Les diapositives suivantes dtaillent ces trois tapes.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-5
Copyright 2008, Oracle. Tous droits rservs.
Dclarer un tableau
Crez une variable pour rfrencer l'objet tableau :
Lorsqu'une variable tableau est dclare :
Sa variable d'instance est initialise avec la valeur null tant
que l'objet tableau n'a pas t cr.
Sa variable de mthode est inconnue tant que l'objet n'a pas
t cr.
int[] powers; // Example
null
powers
Dclarer un tableau
Il existe deux mthodes de dclaration d'un tableau :
Les programmeurs Java utilisent pour la plupart le premier style, car il spare le type de
variable (dans l'exemple, un tableau int) du nom de la variable, ce qui rend le code plus
facile lire.
Lorsque vous dclarez une variable de tableau, elle se rfre initialement la valeur null,
jusqu' ce que vous initialisiez le tableau l'aide de new.
Syntaxe Exemple
type[] arrayname; int[] powers;
type arrayname[]; int powers[];
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-6
Copyright 2008, Oracle. Tous droits rservs.
Crer un objet tableau
Crez un tableau de la longueur requise et affectez-le la
variable de tableau :
L'objet tableau est cr l'aide de l'oprateur new.
Le contenu d'un tableau de primitives est initialis
automatiquement.
int[] powers; // Declare array variable
powers = new int[4]; //Create array object
powers
0
0
0
0
Crer un objet tableau
Si vous utilisez l'oprateur new, vous devez indiquer la taille du tableau entre crochets.
Celle-ci doit tre une valeur entire, mais pas ncessairement une constante. Il peut s'agir
d'une expression value lors de l'excution.
Une fois que l'objet tableau a t cr, il garde une longueur fixe pendant toute sa dure de
vie.
Initialisation par dfaut des lments de tableau
Tous les lments d'un nouveau tableau de primitives sont automatiquement initialiss l'aide
de valeurs par dfaut, comme illustr ci-dessous :
La valeur \u0000 est affecte aux lments de type char.
La valeur 0 est affecte aux lments de type byte, short, int et long.
La valeur false est affecte aux lments de type boolean.
La valeur 0.0 est affecte aux lments de type float et double.
Remarque : \u0000 correspond Unicode 0000. Java utilise le jeu de caractres Unicode.
Exemples de cration de tableaux valides
Exemple 1
final int SIZE = 4;
int[] powers = new int[SIZE]; // SIZE is a constant
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-7
Crer un objet tableau (suite)
Exemple 2
int[] examMarks;
int num = askUserHowManyStudents(); // set the value of num
examMarks = new int[num]; // array is a fixed size
Exemples de cration de tableaux incorrects
Exemple 1
int powers[4]; // Syntaxe non valide : Vous ne pouvez pas dfinir
la taille
// du tableau dans l'instruction de dclaration.
Exemple 2
int num;
int[] examMarks = new int[num]; // Erreur de compilation : num
// n'a pas t initialis.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-8
Copyright 2008, Oracle. Tous droits rservs.
Initialiser les lments d'un tableau
Affectez des valeurs aux diffrents lments :
Crez et initialisez simultanment le tableau :
int[] primes = {2, 3, 5, 7};
type[] arrayName = {valueList};
primes
[0]
[1]
[2]
2
3
5
7 [3]
arrayName[index] = value;
powers[0] = 1;
powers
[0]
[1]
[2]
1
0
0
0 [3]
Initialiser les lments d'un tableau
Premire mthode : Affecter une valeur chaque lment du tableau
Pour faire rfrence un lment de tableau, utilisez un index entre crochets ([]) comme
indiqu dans la diapositive ci-dessus. Les lments de tableau sont numrots de 0 n-1, o
n reprsente le nombre d'lments du tableau. En d'autres termes, l'index du premier lment
d'un tableau est 0 et non 1.
Deuxime mthode : Utiliser des initialiseurs de tableau
Comme le montre la diapositive ci-dessus, il existe une technique plus directe pour crer et
initialiser un tableau de primitives. Cette technique ne ncessite pas l'utilisation de l'oprateur
new et la longueur du tableau est dfinie automatiquement. Notez l'utilisation des crochets et
du point-virgule la fin.
Les initialiseurs de tableau sont trs utiles pour la cration de tables de consultation, comme
l'illustre l'exemple suivant :
int[] daysInMonth = {31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31};
Cette mthode n'est utile que si la valeur de chaque lment est connue au moment de la
cration du tableau.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-9
Copyright 2008, Oracle. Tous droits rservs.
Crer un tableau de rfrences objet
1. Dclarez le tableau.
2. Crez l'objet tableau.
3. Initialisez les objets du tableau.
null
arrVar
null
null
null
arrVar
Action
Comedy
Drama
arrVar
ClassName[] arrVar;
ou
ClassName arrVar[];
// Create array object syntax
arrVar = new ClassName[size];
Crer un tableau de rfrences objet
Les tapes de la cration d'un tableau de rfrences objet sont les mmes que pour un tableau
de primitives, une exception prs : vous devez initialiser les lments du tableau, car cette
opration n'est pas effectue automatiquement.
1. Dclaration : La syntaxe est la mme que pour les tableaux de primitives. Par exemple,
String[] categories;
dclare une variable qui peut pointer sur un tableau de type String. Si la variable est
une variable d'instance, elle est initialise avec la valeur null.
2. Cration : La syntaxe est la mme que pour les tableaux de primitives. Par exemple,
categories = new String[3];
cre un objet tableau du type appropri (String) et de taille 3. A l'origine, la valeur
null est affecte tous les lments.
Un tableau peut tre dclar et cr dans la mme instruction.
Par exemple, String[] categories = new String[3];
3. Initialisation : Initialisez les lments du tableau en leur attribuant les valeurs
souhaites. Cette opration est dcrite dans la diapositive suivante.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-10
Copyright 2008, Oracle. Tous droits rservs.
Initialiser les objets d'un tableau
Affectez une valeur chaque lment du tableau :
Crez et initialisez simultanment le tableau :
String[] categories =
{"Action", "Comedy", "Drama"};
// Create an array of four empty Strings
String[] arr = new String[4];
for (int i = 0; i < arr.length; i++) {
arr[i] = new String();
}
Initialiser les objets d'un tableau
Comme pour les tableaux de primitives, il existe deux mthodes d'initialisation d'un tableau
de rfrences objet. Vous pouvez initialiser le tableau en affectant une valeur chacun de ses
lments ou en initialisant le tableau au moment de sa cration.
Proprit length
Chaque tableau possde un attribut length qui contient le nombre d'lments du tableau.
Grce l'utilisation de la proprit length, vous pouvez viter de coder en dur ou de stocker
la taille d'un tableau dans le code. Etant donn que l'index du premier lment d'un tableau
est 0, l'index de son dernier lment est length 1.
L'exemple de la diapositive ci-dessus utilise la proprit length pour effectuer une boucle
sur tous les lments d'un tableau, dans le but de crer un tableau de chanes vides.
La classe System fournit galement une mthode utile de copie de tout ou partie d'un tableau
dans un autre tableau. Pour plus d'informations, recherchez System.arraycopy() dans la
documentation du kit JDK (Java Development Kit).
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-11
Copyright 2008, Oracle. Tous droits rservs.
Utiliser un tableau de rfrences objet
Tout lment peut tre affect un objet de type correct :
Chaque lment peut tre trait comme un objet
individuel :
Un lment de tableau peut tre transmis n'importe
quelle mthode, par rfrence.
System.out.println
("Length is " + categories[2].length());
String category = categories[0];
Transmettre des tableaux des mthodes
Les tableaux se comportent comme des objets. Par consquent, lorsque vous transmettez un
tableau une mthode, il est transmis par rfrence (comme n'importe quel autre objet). Si la
mthode modifie le contenu du tableau, les modifications prennent effet dans le tableau
d'origine et non dans une copie.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-12
Copyright 2008, Oracle. Tous droits rservs.
Passer en revue les lments d'un tableau
Utilisez une boucle pour explorer chacun des lments
d'un tableau :
Java 5.0 fournit la syntaxe avance suivante :
for (String category: categories) {
System.out.println ("Category: " +category);
}
for (int i = 0;i < categories.length; i++){
System.out.println("Category: "+categories[i]);
}
Explorer les lments d'un tableau
Dans la plupart des cas, la recherche des lments qui seront manipuls par un programme
exige d'excuter une boucle sur un tableau et d'examiner chaque lment du tableau.
La diapositive ci-dessus prsente deux syntaxes diffrentes pour passer en revue les lments
d'un tableau.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-13
Copyright 2008, Oracle. Tous droits rservs.
Tableaux et exceptions
ArrayIndexOutOfBoundsException est utilis
lorsqu'un index de tableau est invalide :
NullPointerException est utilis lorsque vous tentez
d'accder un lment qui n'a pas t initialis :
Movie[] movieList = new Movie[3];
// The following will throw NullPointerException
String director = movieList[0].getDirector();
String[] list = new String[4];
//The following throws ArrayIndexOutOfBoundsException
System.out.println(list[4]);
Tableaux et exceptions
La diapositive ci-dessus illustre les exceptions (ou erreurs) qui s'affichent lorsque vous tentez
d'effectuer une opration non valide dans un tableau. Pour obtenir des informations dtailles
sur les exceptions, reportez-vous au chapitre "Gnrer et dtecter les exceptions". Vous
risquez de rencontrer ces erreurs si votre code essaie d'excuter une des oprations dcrites
dans la diapositive.
Si vous tentez d'accder un index de tableau non valide, le programme se bloque et affiche
le message d'erreur "ArrayIndexOutOfBoundsException".
Si vous tentez d'accder un lment de tableau qui n'a pas t initialis, le programme se
bloque et affiche le message d'erreur "NullPointerException".
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-14
Copyright 2008, Oracle. Tous droits rservs.
Tableaux plusieurs dimensions
Java prend en charge les tableaux de tableaux :
type[][] arrayname = new type[n1][n2];
int[][] mdarr = new int[4][2];
mdarr[0][0] = 1;
mdarr[0][1] = 7;
[0]
[1]
[2]
[3]
1 7
0 0
0 0
0 0
mdarr
[0][0] [0][1]
Tableaux plusieurs dimensions
Java prend en charge les tableaux plusieurs dimensions (c'est--dire les tableaux de
tableaux) :
int[][] tax = new int[5][4];
La syntaxe ci-dessus dclare et cre une matrice deux dimensions, compose de cinq lignes
contenant chacune quatre colonnes. L'accs aux diffrents lments s'effectue comme suit :
tax[rowIndex][colIndex] = value;
Complment : Tableaux plusieurs dimensions non rectangulaires
L'exemple suivant cre un tableau plusieurs dimensions comportant dix lignes, mais le
nombre de colonnes de chaque ligne est diffrent : la premire ligne comporte un lment, la
deuxime ligne deux lments, etc.
int[][] a = new int[10][];
for (int i = 0; i < a.length; i++) {
a[i] = new int[i + 1];
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-15
Copyright 2008, Oracle. Tous droits rservs.
Transmettre des paramtres de ligne
de commande main()
main() possde un seul paramtre : args.
args est un tableau d'objets String qui contient des
paramtres de ligne de commande :
public class SayHello {
public static void main(String[] args) {
if (args.length != 2)
System.out.println("Specify 2 arguments");
else
System.out.println(args[0]+" "+args[1]);
}
C:\> java SayHello Hello World
Transmettre des paramtres de ligne de commande main()
Une rfrence un tableau peut tre transmise n'importe quelle mthode. La mthode
main() utilise dans les applications Java en est un bon exemple. Au lancement d'une
application (mais pas d'une applet) Java, le systme recherche et appelle la mthode main()
de la classe correspondante.
La mthode main() possde un paramtre unique, qui est une rfrence un tableau d'objets
String. Chaque objet String contient un paramtre de ligne de commande. Le premier
lment du tableau contient le premier paramtre de ligne de commande et non le nom du
programme (comme c'est le cas en C et C++).
Les paramtres de ligne de commande sont toujours convertis en objets String
Il est important de noter que les paramtres de ligne de commande sont toujours reprsents
par des objets String. Dans la mthode main(), vous pouvez avoir besoin de convertir un
paramtre en type de primitive. Par exemple, si l'un des paramtres de ligne de commande
reprsente un nombre, vous devez le convertir en valeur int pour pouvoir effectuer des
oprations arithmtiques.
Dfinir des paramtres de ligne de commande dans JDeveloper
JDeveloper offre une bote de dialogue qui permet de dfinir des paramtres de ligne de
commande pour une application Java. Lorsque vous excutez l'application partir de
l'environnement JDeveloper, ce dernier transmet les paramtres la mthode main(),
comme d'habitude.
Pour dfinir des paramtres de ligne de commande dans JDeveloper, slectionnez Tools >
Project Properties dans la barre de menus, puis cliquez sur Run/Debug. Cliquez sur le bouton
Edit et indiquez les arguments du programme en tant que paramtres de ligne de commande.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-16
Copyright 2008, Oracle. Tous droits rservs.
Java Collections Framework
Java Collections Framework est une architecture API qui
permet la gestion d'un groupe d'objets pouvant tre manipuls
indpendamment de leur implmentation interne.
Elle se trouve dans le package java.util.
Elle est dfinie par six interfaces essentielles et des
classes d'implmentation :
Interface Collection : groupe gnrique d'lments
Interface Set : groupe d'lments uniques
Interface List : groupe ordonn d'lments
Interface Map : groupe de cls uniques et de leurs valeurs
SortedSet et SortedMap pour les interfaces Set et Map
tries
Java Collections Framework
Java Collections Framework est une architecture API qui permet la gestion d'une collection
d'objets pouvant tre manipuls indpendamment de leur implmentation interne. Il s'agit
d'une architecture unifie pour la reprsentation et la manipulation de collections. Toutes les
structures de collection contiennent trois lments : interfaces, implmentations et
algorithmes.
Une collection est un objet conteneur qui contient un groupe d'objets appels lments. Java
Collections Framework prend en charge trois grands types de collection, les ensembles, les
listes et les mappes, dfinis respectivement dans les interfaces Set, List et Map.
L'interface Collection est une abstraction qui reprsente un groupe d'lments.
L'interface Set modlise l'abstraction mathmatique ensemble. Il s'agit d'une collection
ne pouvant pas contenir de doublons.
L'interface List reprsente une collection ordonne (ou squence) d'lments, qui peut
comprendre des doublons. Les listes permettent de contrler l'emplacement o chaque
lment est insr. Les lments sont accessibles par l'intermdiaire de leur index entier
(position).
L'interface Map reprsente un objet qui mappe une ou plusieurs cls et leurs valeurs. Les
mappes ne contiennent pas de cls en double et chaque cl est mappe avec une valeur
unique.
Les interfaces SortedSet et SortedMap fournissent des collections ordonnes.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-17
Copyright 2008, Oracle. Tous droits rservs.
Hirarchie des interfaces Java Collections
Framework
Collection
List Set
SortedSet
Map
SortedMap
Hirarchie des interfaces Java Collections Framework
Comme l'expliquait la diapositive prcdente, l'architecture Java Collections Framework est
constitue d'un ensemble d'interfaces permettant de manipuler des groupes d'objets.
Diffrentes interfaces dcrivent diffrents types de groupe. Il est ncessaire de crer des
implmentations spcifiques de ces interfaces, mais l'accs la collection proprement dite doit
se limiter l'utilisation des mthodes de l'interface, ce qui permet de modifier la structure
sous-jacente des donnes sans affecter le reste du code.
Le diagramme de la diapositive ci-dessus illustre la hirarchie des interfaces Java Collections
Framework. Il serait logique d'imaginer Map comme une extension de Collection. En
mathmatiques, une carte n'est en effet qu'une collection de paires de coordonnes. Pourtant,
les interfaces Map et Collection sont compltement indpendantes l'une de l'autre dans la
hirarchie. Les raisons de cet isolement sont lies la manire dont les bibliothques de
technologies Java utilisent les interfaces Set et Map. Une mappe sert gnralement fournir
l'accs aux valeurs stockes dans des cls. Vous disposez de tous les oprateurs de collection,
mais vous les utilisez sur des paires cl-valeur et non sur des lments simples. L'interface
Map est donc conue pour prendre en charge les oprations de base get() (obtenir) et
put() (envoyer) qui ne sont pas requises par Set.
Lors de la conception d'un logiciel l'aide de Java Collections Framework, il est utile d'avoir
en tte les relations hirarchiques suivantes entre les quatre interfaces fondamentales :
L'interface Collection est un groupe d'objets qui peut contenir des doublons.
L'interface Set tend Collection, mais interdit les doublons.
L'interface List tend Collection, autorise les doublons et introduit une indexation
par position.
L'interface Map n'tend aucune des autres interfaces.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-18
Copyright 2008, Oracle. Tous droits rservs.
Composants de Java Collections Framework
Java Collections Framework est un ensemble d'interfaces et de
classes qui permettent de stocker et de manipuler un groupe
de donnes sous la forme d'une entit unique.
Les interfaces standard sont celles utilises pour
manipuler les collections et pour les transmettre d'une
mthode une autre.
Les implmentations sont les objets de donnes rels
utiliss pour le stockage des collections. Les structures de
donnes implmentent l'interface de collection standard.
Les algorithmes sont des lments rutilisables fournis par
le JDK.
Composants de Java Collections Framework
La conception des programmes ncessite souvent la gestion de groupes d'objets. Java
Collections Framework offre un jeu de classes utilitaires standard permettant la gestion des
collections. La structure est constitue de trois composants principaux :
Interfaces standard : Ces interfaces permettent de manipuler les collections
indpendamment de leur implmentation. Elles dcrivent un jeu commun de
fonctionnalits, affiches par des collections, et amliorent l'change de donnes entre les
collections. Dans les langages orients objet, ces interfaces sont gnralement contenues
dans une hirarchie.
Implmentations : Un petit ensemble d'implmentations concrtes des interfaces
standard fournit une structure de donnes pouvant tre utilise par un programme. Dans
un certain sens, il s'agit de structures de donnes rutilisables. On distingue trois sortes
d'implmentation : les implmentations gnrales, les implmentations wrapper et les
implmentations simplifies.
Algorithmes : Il s'agit de mthodes qui effectuent des calculs utiles, tels que la recherche
et le tri, sur des objets qui implmentent des interfaces de collection. Ces algorithmes
sont dits polymorphiques, car la mme mthode peut tre utilise sur de nombreuses
implmentations diffrentes de l'interface de collection approprie.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-19
Copyright 2008, Oracle. Tous droits rservs.
Interface Collection et classe
AbstractCollection
L'interface Collection :
est l'interface racine pour la manipulation d'une collection
d'objets
fournit les oprations de base permettant d'ajouter et de
supprimer des lments dans une collection
fournit diverses oprations d'interrogation
fournit la mthode toArray qui renvoie une reprsentation de
la collection sous forme de tableau
AbstractCollection est une classe simplifie qui fournit
une implmentation partielle de l'interface Collection. Elle
implmente toutes les mthodes fournies par Collection,
l'exception de size et iterator.
L'interface Iterator est utilise pour parcourir les lments
d'une collection.
Interface Collection et classe AbstractCollection
L'interface Collection fournit les oprations de base permettant d'ajouter et de supprimer
des lments dans une collection. La mthode add ajoute un lment la collection, addAll
ajoute la collection tous les lments d'une collection dsigne, remove() supprime un
lment de la collection et removeAll() supprime de la collection les lments figurant
dans une collection spcifique. La mthode retainAll conserve dans la collection les
lments qui figurent galement dans une collection donne. Toutes ces mthodes renvoient
un rsultat de type boolean. La valeur renvoye est true si l'excution de la mthode a
modifi la collection. La mthode clear supprime tous les lments de la collection.
L'interface Collection fournit galement des oprations d'interrogation. La mthode
size renvoie le nombre d'lments de la collection. La mthode contains vrifie si la
collection contient tous les lments d'une collection dsigne. La mthode isEmpty
renvoie true si la collection est vide.
L'interface Iterator fournit un mcanisme uniforme de parcours des lments dans des
collections de divers types. La mthode iterator de l'interface Collection renvoie une
instance de l'interface Iterator qui permet l'accs squentiel aux lments de la collection
l'aide de la mthode next().
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-20
Copyright 2008, Oracle. Tous droits rservs.
Interface Iterator
L'interface Iterator peut tre utilise pour traiter une srie
d'objets. L'interface java.util.Iterator :
implmente une approche oriente objet pour accder aux
lments d'une collection
remplace l'approche java.util.Enumeration
contient les mthodes suivantes :
hasNext() renvoie true s'il existe davantage d'lments
next() renvoie l'objet suivant, s'il existe
remove() supprime le dernier lment renvoy
Interface Iterator
Les collections diffrent des tableaux en ce sens que les membres d'une collection ne sont pas
accessibles directement par l'intermdiaire d'index. Lorsque vous utilisez une interface
Enumeration ou Iterator, vous ne pouvez dplacer le pointeur de l'lment actuel que
vers le premier lment ou l'lment suivant d'une collection. L'interface Enumeration
faisait partie de l'API Java standard, tandis que l'interface Iterator a t ajoute avec Java
Collections Framework. Iterator permet de supprimer un objet d'une collection, tandis
que Enumeration permet seulement de parcourir une collection.
L'exemple qui suit cre une ArrayList contenant plusieurs lments String, puis appelle
la mthode iterator() afin de renvoyer un objet Iterator. La boucle utilise la
mthode next() de l'interface Iterator pour obtenir les lments et afficher leur valeur
de type chane en majuscules.
Lorsque hasNext() prend la valeur false, la boucle se termine.
import java.util.ArrayList;
import java.util.Iterator;
:
ArrayList al = new ArrayList();
al.add("Jazz");
al.add("Classical");
al.add("Rock 'n Roll");
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-21
Interface Iterator (suite)
for (Iterator e = al.iterator();
e.hasNext(); ) {
String s = (String) e.next();
System.out.println(s.toUpperCase());
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-22
Copyright 2008, Oracle. Tous droits rservs.
Ensembles
L'interface Set tend l'interface Collection.
Les classes concrtes qui implmentent Set doivent
garantir qu'aucun lment en double ne peut tre ajout
la collection.
AbstractSet tend AbstractCollection et
implmente l'interface Set.
Trois classes concrtes implmentent Set :
HashSet
LinkedHashSet
TreeSet
Ensembles
L'interface Set tend l'interface Collection. Elle n'introduit pas de nouvelles mthodes
ou constantes, mais elle stipule qu'une instance de Set (un ensemble) ne contient aucun
doublon.
La classe simplifie AbstractSet tend la classe AbstractCollection et
implmente Set. La classe AbstractSet fournit des implmentations concrtes pour les
mthodes equals et hashCode. Le code de hachage d'un ensemble est la somme des codes
de hachage de tous les lments de la collection.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-23
Copyright 2008, Oracle. Tous droits rservs.
Classe HashSet
Une collection HashSet peut tre utilise pour stocker des
lments sans doublons.
Vous pouvez crer un ensemble de hachage vide l'aide
de son constructeur sans argument ou utiliser une collection
existante pour crer un ensemble de hachage.
Les objets ajouts un ensemble de hachage doivent
implmenter la mthode hashCode d'une manire qui
rpartit correctement le code de hachage.
Deux objets gaux doivent avoir le mme code de hachage.
Deux objets qui ne sont pas gaux peuvent avoir le mme
code de hachage, mais vous devez implmenter la mthode
hashCode de manire limiter ce genre de situation.
Classe HashSet
Exemple de collection HashSet
Le programme suivant recherche tous les mots utiliss dans une section de texte. Il cre un
ensemble de hachage pour stocker les mots extraits, ainsi qu'un itrateur pour parcourir les
lments de l'ensemble.
import java.util.*;
public class TestHashSet {
public static void main(String[] args) {
//Create a hash set
Set<String> set = new HashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-24
Classe HashSet (suite)
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
//Display the elements in the hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Ce programme ajoute des lments de type String un ensemble de hachage, affiche
ces lments l'aide de la mthode toString et les parcourt l'aide d'un itrateur. "New York" est
ajout plus d'une fois la collection, mais une seule occurrence est stocke car un ensemble
n'autorise pas les doublons.
Lorsque vous excutez le programme, vous remarquez que les chanes ne sont pas stockes dans
l'ordre o elles ont t insres dans la collection. Les lments d'un ensemble de hachage ne sont pas
stocks dans un ordre particulier. Pour leur imposer un ordre, vous devez utiliser la classe
LinkedHashSet prsente dans la diapositive suivante.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-25
Copyright 2008, Oracle. Tous droits rservs.
Classe LinkedHashSet
La classe LinkedHashSet a t introduite dans la
version JDK 1.4.
Elle prend en charge l'organisation des lments d'un
ensemble.
Vous pouvez crer une collection LinkedHashSet
l'aide du constructeur sans argument de cette classe.
Classe LinkedHashSet
Exemple de collection LinkedHashSet
L'exemple suivant rcrit le prcdent en utilisant la classe LinkedHashSet.
import java.util.*;
public class TestLinkedHashSet {
public static void main(String[] args) {
//Create a linked hash set
Set<String> set = new LinkedHashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-26
Classe LinkedHashSet (suite)
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
System.out.println(set);
//Display the elements in the linked hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Lorsque vous excutez ce programme, vous remarquez que l'ensemble
LinkedHashSet a conserv l'ordre dans lequel les lments ont t insrs. Pour imposer un ordre
diffrent, vous devez utiliser la classe TreeSet prsente dans la diapositive suivante.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-27
Copyright 2008, Oracle. Tous droits rservs.
Classe TreeSet
TreeSet est une classe concrte qui implmente
l'interface SortedSet.
SortedSet est une sous-interface de Set qui garantit le
tri des lments de l'ensemble.
SortedSet fournit les mthodes suivantes :
first() et last() renvoient respectivement le premier et
le dernier lments de l'ensemble.
headSet(toElement) et tailSet(fromElement)
renvoient la partie de l'ensemble dont les lments sont
respectivement infrieurs toElement et suprieurs
fromElement.
Vous ne pouvez ajouter un ensemble TreeSet que des
lments comparables entre eux.
Classe TreeSet
Vous devez pouvoir comparer entre eux les lments d'une collection TreeSet. Vous avez
le choix entre deux mthodes de comparaison :
Utiliser l'interface Comparable. Si les objets ajouts l'ensemble sont des instances de
Comparable, vous pouvez les comparer l'aide de la mthode compareTo. Dans
l'API Java, plusieurs classes implmentent l'interface Comparable, notamment
String, Date, Calendar et toutes les classes wrapper de primitives.
Si la classe des lments de la collection n'implmente pas l'interface Comparable ou
si vous ne voulez pas utiliser la mthode compareTo dans la classe qui implmente
l'interface Comparable, indiquez un comparateur pour les lments de l'ensemble.
Exemple d'ensemble TreeSet
L'exemple suivant utilise l'interface Comparable pour ordonner les lments de l'ensemble.
Il rcrit l'exemple prcdent pour afficher les mots en ordre alphabtique l'aide de la classe
TreeSet.
import java.util.*;
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-28
Classe TreeSet (suite)
public class TestTreeSet {
public static void main(String[] args) {
//Create a hash set
Set<String> set = new HashSet<String>();
//Add strings to the set
set.add("London");
set.add("Paris");
set.add("New York");
set.add("San Francisco");
set.add("Beijing");
set.add("New York");
TreeSet<String> treeSet = new TreeSet<String>(set);
System.out.println(treeSet);
//Display the elements in the hash set
for (Object element: set)
System.out.print(element.toString() + " ");
}
}
Remarque : Ce programme cre un ensemble HashSet contenant des chanes, puis il cre un
ensemble TreeSet avec les mmes chanes. Les chanes de l'ensemble TreeSet sont tries
l'aide de la mthode compareTo de l'interface Comparable.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-29
Copyright 2008, Oracle. Tous droits rservs.
Listes
L'interface List tend Collection pour dfinir une
collection ordonne pouvant contenir des doublons.
Elle fournit des oprations qui tiennent compte de la
position des lments.
Un itrateur de liste permet de parcourir la collection dans
les deux sens.
La classe AbstractList fournit une implmentation
partielle de l'interface List.
La classe AbstractSequentialList tend
AbstractList et prend en charge les listes ordonnes.
Les classes ArrayList et LinkedList sont deux
implmentations concrtes de l'interface List.
Listes
Les ensembles n'autorisent pas les doublons. Pour stocker des doublons dans une collection,
vous devez utiliser une liste implmentant l'interface List. Une liste permet de stocker
plusieurs occurrences d'un mme lment, mais aussi d'indiquer leur emplacement dans la
collection. L'utilisateur peut accder ces lments via un index.
L'interface List comprend les mthodes suivantes :
add(index, element) Ajoute l'lment element la position index
addAll(index, collection) Insre la collection collection la position
index
remove(index) Supprime de la liste l'lment situ
la position index
set(index, element) Dfinit l'lment element la position index
listIterator Renvoie l'itrateur de liste utilis dans la collection
listIterator(startIndex) Renvoie l'itrateur des lments partir
de la position startIndex
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-30
Copyright 2008, Oracle. Tous droits rservs.
Classe ArrayList
Caractristiques de la classe ArrayList :
Elle stocke les lments dans un tableau.
Elle est une implmentation redimensionnable de
l'interface List.
Elle permet la manipulation de la taille des tableaux.
Elle prsente une capacit qui augmente mesure que
des lments sont ajouts la liste.
Pour crer une collection ArrayList vide :
Pour crer une collection ArrayList avec une taille initiale :
ArrayList members = new ArrayList();
// Create an ArrayList with 10 elements.
ArrayList members = new ArrayList(10);
Classe ArrayList
La classe ArrayList appartient au package java.util et fournit un tableau
redimensionnable d'objets. Les tableaux Java ont une taille fixe. La classe ArrayList est
donc utile lorsque vous ne connaissez pas la taille future d'un tableau au moment de sa
cration. Par exemple, vous pouvez recevoir une liste de noms en provenance d'un serveur et
stocker ces noms dans un tableau local. Avant d'extraire les donnes du serveur, vous ne
connaissez pas la taille de la liste.
La classe ArrayList fournit des mthodes permettant d'accder la liste et de la modifier.
Cette classe est en grande partie quivalente la classe Vector, ceci prs qu'elle n'est pas
synchronise.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-31
Copyright 2008, Oracle. Tous droits rservs.
Modifier une collection ArrayList
Ajouter un lment la fin de la collection ArrayList :
Ajouter un lment une position spcifique :
Supprimer l'lment une position spcifique :
String name = MyMovie.getNextName();
members.add(name);
// Remove the first element
members.remove(0);
// Insert a string at the beginning
members.add(0, name);
Modifier une collection ArrayList
Lorsque vous ajoutez un lment une collection ArrayList, celle-ci est tendue d'un
lment. A l'inverse, si vous supprimez un lment d'une collection ArrayList, la taille de
la collection diminue. Si vous insrez un lment une position spcifique, les index de tous
les lments situs aprs cette position augmentent de 1.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-32
Copyright 2008, Oracle. Tous droits rservs.
Accder une collection ArrayList
Extraire le premier lment :
Extraire un lment une position spcifique :
Rechercher un objet dans une collection ArrayList :
Obtenir la taille d'une collection ArrayList :
String s = members.get(0);
int size = members.size();
String s = members.get(2);
int position = members.indexOf(name);
Indexation des collections ArrayList
L'index du premier lment d'une collection ArrayList est 0.
Exemple de collection ArrayList contenant des objets diffrents
Vous pouvez combiner des objets de diffrents types dans une collection ArrayList. Voici
un exemple simple :
ArrayList al = new ArrayList();
al.add('pat');
al.add(10);
al.add(123456.789);
System.out.println(al); // to print the ArrayList
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-33
Copyright 2008, Oracle. Tous droits rservs.
Classe LinkedList
Caractristiques de la classe LinkedList :
Elle est une implmentation de l'interface List.
Elle fournit des mthodes permettant d'extraire, d'insrer et
de supprimer des lments partir des deux extrmits de
la liste.
Elle peut tre cre l'aide de son constructeur sans
argument ou de LinkedList(Collection).
Les classes ArrayList et LinkedList fonctionnent
de manire similaire. La diffrence essentielle rside dans
l'implmentation interne qui affecte les performances.
La classe ArrayList est efficace pour extraire des lments
et pour insrer et supprimer des lments partir de la fin
de la liste.
La classe LinkedList est efficace pour insrer et supprimer
des lments n'importe o dans la liste.
Exemple de collection LinkedList
L'exemple suivant cre une collection ArrayList d'lments numriques et insre de
nouveaux lments des positions spcifiques. A partir de cette collection, il cre ensuite une
collection LinkedList dans laquelle il insre et supprime des lments. Enfin, il parcourt
la liste dans les deux sens.
import java.util.*;
public class TestArrayAndLinkedList {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(1); //1 is autoboxed to new Integer(1)
arrayList.add(2);
arrayList.add(3);
arrayList.add(1);
arrayList.add(4);
arrayList.add(0, 10);
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-34
Exemple de collection LinkedList (suite)
arrayList.add(3, 30);
System.out.println("A list of integers in the array
list:");
System.out.println(arrayList);
LinkedList<Object> linkedList = new
LinkedList<Object>(arrayList);
linkedList.add(1, "red");
linkedList.removeLast();
linkedList.addFirst("green");
System.out.println("Display the linked list forwards:");
ListIterator listIterator = linkedList.listIterator();
while (listIterator.hasNext()) {
System.out.print(listIterator.next() + " ");
}
System.out.println();
System.out.println("Display the linked list backwards:");
listIterator = linkedList.listIterator(linkedList.size());
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + " ");
}
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-35
Copyright 2008, Oracle. Tous droits rservs.
Mappes
L'interface Collection reprsente une collection
d'lments stocks dans un ensemble ou une liste.
L'interface Map associe des cls aux lments.
Les cls sont semblables aux index.
Tous les objets peuvent constituer des cls.
Chaque cl est associe une seule valeur.
L'interface Map fournit des mthodes permettant
d'interroger, de mettre jour et d'obtenir une collection de
valeurs et un ensemble de cls.
Mappes
Les mthodes d'interrogation sont containsKey, containsValue, isEmpty et size.
La mthode containsKey(Object key) vrifie si la mappe contient une
correspondance pour la cl indique. La mthode containsValue(Object value)
vrifie si la mappe contient une correspondance pour la valeur indique. La mthode
isEmpty() vrifie si la mappe contient des mappings cl-valeur. La mthode size()
renvoie le nombre de mappings cl-valeur contenus dans la mappe.
Les mthodes de mise jour sont clear, put, putAll et remove. La mthode clear()
supprime tous les mappings de la mappe. La mthode put(Object key, Object
value) associe la valeur Object value la cl Object key dans la mappe. Si la
mappe contenait dj un mapping pour cette cl, la mthode renvoie l'ancienne valeur. La
mthode putAll(Map m) ajoute la mappe indique la mappe en cours. La mthode
remove(Object key) supprime de la mappe les lments correspondant la cl
indique.
Vous pouvez obtenir l'ensemble des cls dfinies dans la mappe l'aide de la mthode
keySet, et l'ensemble des valeurs dfinies dans la mappe l'aide de la mthode values. La
mthode entrySet renvoie une collection d'objets qui implmentent l'interface
Map.Entry, Entry tant une interface interne l'interface Map. Chaque objet de cette
collection est une paire cl-valeur spcifique de la mappe sous-jacente.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-36
Copyright 2008, Oracle. Tous droits rservs.
Types de mappe
HashMap, LinkedHashMap et TreeMap sont trois
implmentations concrtes de l'interface Map.
HashMap est efficace pour rechercher une valeur et pour
insrer ou supprimer un mapping de cl.
LinkedHashMap prend en charge l'organisation des
entres dans la mappe.
TreeMap est efficace pour parcourir les cls dans un
certain ordre de tri.
Types de mappe
Trois types de mappe sont pris en charge : HashMap, LinkedHashMap et TreeMap.
HashMap est efficace pour rechercher une valeur et pour insrer ou supprimer un
mapping de cl.
LinkedHashMap prend en charge l'organisation des entres dans la mappe. Dans une
mappe HashMap, les entres ne sont pas ordonnes. En revanche, les entres
LinkedHashMap peuvent tre extraites soit dans l'ordre o elles ont t insres (ordre
d'insertion), soit dans l'ordre o elles ont t manipules (ordre d'accs), de l'accs le
moins rcent l'accs le plus rcent.
La classe TreeMap implmente la classe SortedMap. Elle est efficace pour parcourir
les cls dans un certain ordre de tri. Vous pouvez trier les cls l'aide de l'interface
Comparable ou de l'interface Comparator. Si vous crez une mappe TreeMap
l'aide du constructeur sans argument de la classe, la mthode compareTo de l'interface
Comparable est utilise pour comparer les lments de la collection, en supposant que
la classe de ces lments implmente l'interface Comparable. Si vous voulez utiliser
un comparateur, vous devez recourir au constructeur TreeMap(Comparator
comparator) pour crer une mappe trie dont les lments sont ordonns en fonction
des cls l'aide de la mthode compare du comparateur.
Remarque : Avant la version JDK 1.2, l'interface Map tait prise en charge dans la classe
java.util.Hashtable. Depuis, la classe Hashtable a t modifie pour tre intgre
Java Collections Framework, mais toutes ses mthodes ont t conserves pour des raisons
de compatibilit. La classe Hashtable implmente l'interface Map et s'utilise comme
HashMap, ceci prs que Hashtable est synchronise.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-37
Copyright 2008, Oracle. Tous droits rservs.
Exemple d'utilisation des mappes
L'exemple ci-aprs cre des mappes HashMap, LinkedHashMap
et TreeMap contenant des mappings tudiant-ge.
Exemple d'utilisation des mappes (suite)
Exemple de mappe
Le programme suivant commence par crer une mappe HashMap dans laquelle la cl est le
nom de l'tudiant, et la valeur, l'ge de l'tudiant. Il cre ensuite une mappe TreeMap partir
de la mappe HashMap et affiche les mappings dans l'ordre croissant des cls. Enfin, il cre
une mappe LinkedHashMap, y ajoute les mmes entres et affiche ces dernires.
import java.util.*;
public class testMap {
public static void main (String[] args) {
// Create a HashMap
Map<String, Integer> hashMap = new HashMap<String,
Integer>();
hashMap.put("Smith", 30);
hashMap.put("Anderson", 31);
hashMap.put("Lewis", 29);
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-38
Exemple d'utilisation des mappes (suite)
hashMap.put("Cook", 29);
System.out.println("Display entries in HashMap");
System.out.println(hashMap);
//Create a TreeMap from the HashMap
Map<String, Integer> treeMap = new TreeMap<String,
Integer>(hashMap);
System.out.println("\nDisplay entries in ascending
order of key");
System.out.println(treeMap);
//Create a LinkedHashMap
Map<String, Integer> linkedHashMap = new
LinkedHashMap<String, Integer>(16, 0.75f, true);
linkedHashMap.put("Smith", 30);
linkedHashMap.put("Anderson", 31);
linkedHashMap.put("Lewis", 29);
linkedHashMap.put("Cook", 29);
//Display the age for Lewis
System.out.println("The age for " + "Lewis is " +
linkedHashMap.get("Lewis").intValue());
System.out.println("\nDisplay entries in
LinkedHashMap");
System.out.println(linkedHashMap);
}
}
Remarque 1 : Lorsque vous excutez ce programme, vous remarquez que les entres de la mappe
HashMap sont en ordre alatoire. Les entres de la mappe TreeMap sont dans l'ordre croissant des
cls. Les entres de la mappe LinkedHashMap sont dans l'ordre d'accs, de l'accs le moins rcent
l'accs le plus rcent.
Remarque 2 : L'exemple prcdent utilise des types gnriques, traits dans le chapitre suivant.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-39
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
crer des tableaux Java de primitives
crer des tableaux de rfrences objet
initialiser des tableaux de primitives ou de rfrences objet
traiter les arguments de ligne de commande dans la
mthode main()
utiliser Java Collections Framework pour grer des
collections d'objets
utiliser les interfaces de base de l'API Java Collections
Framework : Collection, Set, List, Map, SortedSet
et SortedMap
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 11-40
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 11 :
Utiliser les tableaux et les collections
Dans cet exercice, vous allez :
modifier la classe DataMan
crer un tableau contenant les objets Customer,
Company et Individual
ajouter une mthode pour garantir la russite de la
cration et de l'initialisation du tableau
ajouter une mthode pour rechercher un client par
l'intermdiaire d'une valeur d'ID
Prsentation de l'exercice 11 : Utiliser les tableaux et les collections
Dans cet exercice, vous manipulerez des tableaux Java et des classes de collection telles que
la classe java.util.ArrayList. Vous utiliserez galement des arguments de ligne de
commande.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les11, chargez
l'application OrderEntryApplicationLes11, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes11. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes11
OrderEntryProjectLes11 - Application Sources oe, puis cliquez deux
fois sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres
jusqu' prsent dans le cours.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Utiliser des types gnriques
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
expliquer comment l'utilisation de types gnriques peut
amliorer la fiabilit et la lisibilit du logiciel
dclarer et utiliser des classes et des interfaces gnriques
dclarer et utiliser des mthodes gnriques
utiliser des caractres gnriques
Objectifs du chapitre
Ce chapitre explique comment dclarer et utiliser des classes, des interfaces et des mthodes
gnriques. Il dcrit galement la manire d'y recourir pour amliorer la fiabilit et la lisibilit
des logiciels.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-3
Copyright 2008, Oracle. Tous droits rservs.
Types gnriques
Les types gnriques sont des types qui peuvent tre
paramtrs.
Les exemples les plus courants sont les conteneurs tels
que ceux de la hirarchie des collections.
L'utilisation de types gnriques vite les conversions
inutiles lors du traitement des objets d'une collection.
Les paramtres des types paramtrs sont indiqus entre
chevrons.
L'utilisation de types gnriques permet d'viter les erreurs
dues des types inattendus au moment de l'excution. Elle
contribue donc rendre le code plus robuste.
List<String> al = new ArrayList<String>();
Types gnriques
Les types gnriques ont t introduits dans le langage Java dans le cadre de Java SE 5.0. Ils
permettent aux applications de crer des classes et des objets qui peuvent fonctionner avec
n'importe quel type dfini.
Avantages des types gnriques : Exemple
Considrons les quatre lignes de code suivantes :
List al = new ArrayList();
al.add("test");
String s = (String) al.get(0);
Integer i = (Integer) al.get(0);
ArrayList contient une liste d'objets non typs, mais pour utiliser ces objets, le programme
doit les convertir dans le type de donnes correct. Si la conversion est incorrecte, le
compilateur ne dtectera pas l'erreur, mais l'excution du code chouera en gnrant une
exception java.lang.ClassCastException. Le fait de convertir les types chaque
utilisation d'un objet de la collection ArrayList est un processus lourd qui risque en outre
de gnrer des erreurs.
Avec des types gnriques, le code ci-dessus peut tre rcrit comme suit :
List<String> al = new ArrayList <String> ();
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-4
Types gnriques (suite)
al.add("test");
String s = al.get(0);
Integer i = al.get(0);
Remarquez la prsence de chevrons (<>) dans le code. Ils sont utiliss pour fournir les
paramtres aux types paramtrs. Il n'est pas ncessaire de convertir le rsultat en type String
puisque la rfrence al est de type List<String> et que sa mthode .get() renvoie donc
forcment un type String.
La compilation du code ci-dessus dans JDK 1.5 produit une erreur de type au niveau de la
dernire ligne, lors de la tentative de conversion d'un type String en type Integer. Ce type
d'erreur est dsormais dtect ds la compilation.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-5
Copyright 2008, Oracle. Tous droits rservs.
Dclarer des classes gnriques
Prenons l'exemple d'une classe simple appele
ObjectHolder qui peut contenir n'importe quel type
d'objet Java.
Dclaration de la classe ObjectHolder :
ObjectHolder est une classe paramtre.
O est un paramtre de type.
O sert de marque de rservation pouvant contenir
n'importe quel type d'objet.
public class ObjectHolder<O> { }
Dclarer des classes gnriques
La classe ObjectHolder peut contenir n'importe quel type d'objet Java. Elle fournit des
mthodes permettant d'obtenir (get) et de dfinir (set) l'objet en cours.
public class ObjectHolder<O> {
private O anyObject;
public O getObject(); {
return anyObject;
}
public void setObject(O anyObject) {
this.anyObject = anyObject;
}
public String toString() {
return anyObject.toString();
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-6
Copyright 2008, Oracle. Tous droits rservs.
Utiliser les classes gnriques
Pour dfinir une instance de type String de la classe
ObjectHolder :
La substitution de type est utilise pour remplacer le
paramtre de type O par le type String.
ObjectHolder<String> stringHolder = new
ObjectHolder<String>();
Utiliser les classes gnriques
Dans l'exemple ci-aprs, la classe ObjectHolderClient utilise la classe gnrique
ObjectHolder pour crer un objet stringHolder destin contenir un type String,
ainsi qu'un objet urlHolder destin contenir une URL :
public class ObjectHolderClient {
public static void main(String [] args) throws
Exception {
ObjectHolder<String> stringHolder = new
ObjectHolder<String>();
stringHolder.setObject(new String("String"));
System.out.println(stringHolder.toString());
ObjectHolder<URL> urlHolder = new
ObjectHolder<URL>();
urlHolder.setObject(new
URL("http://www.oracle.com/technology/
products/jdev/11/index.html"));
System.out.println(urlHolder,toString());
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-7
Copyright 2008, Oracle. Tous droits rservs.
Mthodes gnriques
Vous pouvez galement utiliser des types gnriques
pour dclarer des mthodes gnriques.
Les paramtres de type affectent uniquement la
mthode gnrique dclare avec ces paramtres.
Une classe non gnrique peut contenir la fois des
mthodes gnriques et des mthodes non
gnriques.
Pour appeler une mthode gnrique, ajoutez le type
rel entre chevrons devant le nom de la mthode.
public static <E> void print(E[] list)
GenericMethod.<String>print(strings);
Mthodes gnriques
Exemple de mthode gnrique
Le programme ci-aprs dclare une mthode gnrique print pour afficher un tableau
d'objets. Il appelle ensuite cette mthode en transmettant d'abord un tableau d'objets
Integer, puis un tableau d'objets String :
public class GenericMethod {
public static void main (String[] args) {
Integer[] integers = {1,2,3,4,5};
String[] strings = {"Dracula", "Titanic",
"Deliverance", "Casablanca"};
GenericMethod.<Integer>print(integers);
GenericMethod.<String>print(strings);
}
public static <E> void print(E[] list) {
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-8
Mthodes gnriques (suite)
for (int i = 0; i < list.length; i++)
System.out.print(list[i] + " ");
System.out.println();
}
}
Exemple : Utilisation d'une mthode gnrique avec une collection
L'exemple suivant utilise la mthode gnrique max pour calculer la plus grande valeur d'une
collection d'lments d'un type inconnu A.
class Collections {
public static <A extends Comparable<A>> A
max(Collection< A > xs) {
Iterator< A > xi = xs.iterator();
A w = xi.next();
while (xi.hasNext()) {
A w = xi.next();
if (w.compareTo(x) < 0) w = x;
}
return w;
}
}
La mthode max est dclare avec un seul paramtre nomm A. Ce paramtre est une marque de
rservation pour le type d'lment de la collection traite par la mthode. Ce paramtre de type
est soumis une contrainte : il doit s'agir d'un sous-type de Comparable<A>.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-9
Copyright 2008, Oracle. Tous droits rservs.
Caractres gnriques
Le point d'interrogation ? est un caractre gnrique.
? reprsente un type Java quelconque. C'est une marque
de rservation qui peut tre remplace par n'importe quel
type.
List<?> dsigne une liste dont les objets sont de type
inconnu.
L'utilisation de caractres gnriques est ncessaire
puisque les objets d'un paramtre de type ne peuvent pas
tre convertis en objets d'un autre paramtre.
List<?> anyObjects = null;
Caractres gnriques
Les paramtres de type gnrique ne sont pas limits des classes spcifiques dans Java. Le
langage Java permet d'utiliser des caractres gnriques pour dfinir des contraintes
concernant le type des paramtres admis par un objet gnrique donn. Les caractres
gnriques sont des paramtres de type de la forme "?".
Comme le type d'lment exact d'un objet dfini avec un caractre gnrique est inconnu, des
restrictions sont appliques au type des mthodes pouvant tre appeles sur cet objet. Un
caractre gnrique non restreint est utilis ci-dessus dans le code List<?> qui dsigne une
liste dont les objets sont de type inconnu. Les mthodes qui acceptent une telle liste comme
argument peuvent s'appliquer n'importe quel type de liste, quel que soit le type du
paramtre. La lecture de cette liste va renvoyer des objets de type Object et l'criture
d'lments non nuls dans la liste n'est pas autorise puisque le type du paramtre est inconnu.
Pour prciser la limite suprieure d'un lment gnrique, vous utilisez le mot-cl extends
et indiquez la classe dont le type gnrique est un sous-type. L'lment gnrique doit donc
tendre la classe indique ou implmenter l'interface de celle-ci. Ainsi, List<? extends
Number> signifie que la liste contient des objets d'un type inconnu qui tend la classe
Number. Par exemple, il peut s'agir de List<Float> ou de List<Number>.
L'utilisation de caractres gnriques est ncessaire puisque les objets d'un paramtre de type
ne peuvent pas tre convertis en objets d'un autre paramtre. Aucun des deux types
List<Float> et List<Number> n'est un sous-type de l'autre (bien que Float soit un
sous-type de Number). Le code qui traite List<Number> ne fonctionne donc pas avec
List<Float>. Les caractres gnriques constituent une solution car ils interdisent les
oprations qui violeraient la scurit des types.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-10
Caractres gnriques (suite)
Pour prciser la limite infrieure d'un lment gnrique, vous utilisez le mot-cl super et
indiquez la classe dont le type gnrique est un supertype. Ainsi, List<? super Number>
pourrait tre List<Number> ou List<Object>. La lecture de la liste renvoie des objets de
type Object. Tout lment de type Number peut tre ajout la liste puisqu'il s'agit d'un type
valide pouvant tre stock dans la liste.
Exemple : Utiliser une mthode gnrique et des caractres gnriques
La mthode suivante affiche tous les lments d'une collection. Notez que Collection<?>
est une collection de type inconnu.
void printCollection(Collection<?> c) {
for(Object o:c) {
System.out.println(o);
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-11
Copyright 2008, Oracle. Tous droits rservs.
Types bruts
Ce sont des types non paramtrs.
Ils sont autoriss dans les versions JDK 1.5 et
suivantes pour des raisons de compatibilit
descendante.
Ils sont compatibles avec toutes les instanciations du
type gnrique en matire d'affectation.
ArrayList rawlist = new ArrayList();
Types bruts
Un type gnrique sans argument de type est appel type brut. Les types bruts sont autoriss
dans le langage, essentiellement pour faciliter l'interfaage avec le code non gnrique des
versions plus anciennes. Par exemple, si vous avez une ancienne mthode non gnrique qui
admet un argument de type List, vous pouvez lui transmettre un type paramtr tel que
List<String>. Inversement, si vous avez une mthode qui renvoie un type List, vous
pouvez affecter son rsultat une variable de rfrence de type List<String> ds lors que
vous savez, d'une manire ou d'une autre, que la liste renvoye est effectivement une liste de
chanes.
Les types bruts sont compatibles avec toutes les instanciations du type gnrique en matire
d'affectation. L'affectation d'une instanciation de type gnrique au type brut correspondant
est autorise et ne gnre pas d'avertissement. L'affectation du type brut une instanciation
gnre un avertissement signalant que la conversion n'est pas vrifie :
ArrayList rawList = new ArrayList():
ArrayList<String> stringList = new
ArrayList<String>();
rawList = stringList;
stringList = rawList; //unchecked warning
L'avertissement "unchecked" indique que le compilateur ne sait pas si le type brut
ArrayList contient effectivement des chanes. Un ArrayList de type brut peut en
principe contenir des objets de n'importe quel type, comme le type gnrique
ArrayList<Object>.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-12
Copyright 2008, Oracle. Tous droits rservs.
Elimination de type
Le compilateur implmente les types gnriques au moyen
d'une limination de type.
Toutes les informations lies aux paramtres et aux
arguments du type sont limines.
Ce processus peut tre dcrit comme une traduction
du code source Java gnrique en code Java
standard.
List<String> devient List
Set<Long> devient Set
Map<String> devient Map
Le compilateur effectue les conversions vers le type
appropri.
Elimination de type
L'limination de type est un processus automatique interne au compilateur qui efface
(limine) toutes les informations lies aux types gnriques. Les informations de type figurant
entre chevrons sont supprimes. Ainsi, un type paramtr tel que List<String> est
converti en List. Toutes les autres utilisations de variables de type sont remplaces par la
limite suprieure de la variable de type (gnralement Object). Lorsque le code rsultant
n'est pas correct au niveau du type, une conversion est effectue vers le type appropri.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 12-13
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
utiliser les types gnriques pour viter des erreurs
de conversion et rendre le code plus robuste
dclarer un type gnrique dans une classe, une interface
ou une mthode
utiliser des caractres gnriques pour dfinir des
contraintes concernant le type des paramtres admis par
un objet gnrique donn
identifier les types bruts (types non paramtrs qui sont
autoriss des fins de compatibilit descendante)
dcrire le processus d'limination de type utilis par le
compilateur pour implmenter les types gnriques
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Structurer le code l'aide
de classes abstraites et d'interfaces
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dfinir des classes abstraites
dfinir des mthodes abstraites
dfinir des interfaces
identifier les similitudes et les diffrences entre une classe
abstraite et une interface
implmenter des interfaces
Objectifs du chapitre
Dans le langage Java, vous pouvez utiliser des interfaces la place d'hritages multiples. Ce
chapitre explique comment procder. Il montre galement comment dfinir et utiliser des
classes abstraites et des mthodes abstraites en Java.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-3
Copyright 2008, Oracle. Tous droits rservs.
Classes abstraites
Une classe abstraite ne peut pas tre instancie.
Les mthodes abstraites doivent tre implmentes par des
sous-classes.
Les interfaces prennent en charge l'hritage multiple en ce
qui concerne le type.
Superclasse
abstraite
Sous-classes
concrtes
InventoryItem
Movie VCR
Classes abstraites
En langage Java, vous pouvez dfinir des classes qui sont des abstractions de haut niveau
d'objets rels. Ces classes de haut niveau permettent au concepteur de contrler l'aspect des
sous-classes ainsi que les mthodes qui sont obligatoires dans ces sous-classes.
Une classe abstraite est simplement une classe qui ne peut pas tre instancie. Seules ses sous-
classes non abstraites peuvent tre instancies. Par exemple, la classe InventoryItem ne
contient pas suffisamment de dtails significatifs pour l'entreprise. Elle peut correspondre un
film ou un lecteur de DVD. En revanche, elle constitue une collection de donnes et de
comportements communs tous les articles qui peuvent tre lous.
Mthodes abstraites
Les mthodes abstraites vont au-del de l'hritage standard. Une mthode abstraite est dfinie
uniquement dans une classe abstraite et doit tre implmente par une sous-classe. Grce
cette technique, le concepteur de la classe peut dfinir prcisment les comportements qu'une
sous-classe doit pouvoir adopter. En revanche, il ne peut pas dterminer comment ces
comportements seront implments. Les classes abstraites peuvent contenir des sous-classes
galement dclares comme tant abstraites. Le cas chant, les mthodes abstraites ne seront
pas implmentes par ces sous-classes abstraites.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-4
Classes abstraites (suite)
Interfaces
Une interface est la spcification d'un ensemble de mthodes, semblable une classe abstraite.
Outre les lments offerts par une classe abstraite, une interface peut fournir de faon efficace
des hritages multiples. Une classe peut implmenter un nombre illimit d'interfaces, mais ne
peut tendre qu'une seule superclasse.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-5
Copyright 2008, Oracle. Tous droits rservs.
Crer des classes abstraites
Utilisez le mot-cl abstract pour dclarer une classe comme
tant abstraite.
public abstract class InventoryItem {
private float price;
public boolean isRentable()
}
public class Movie
extends InventoryItem {
private String title;
public int getLength()
public class Vcr
extends InventoryItem {
private int serialNbr;
public void setTimer()
Crer des classes abstraites
Java fournit le mot-cl abstract, qui indique qu'une classe est abstraite. Par exemple, la
classe InventoryItem de la diapositive ci-dessus a t dclare comme abstraite.
public abstract class InventoryItem {
}
InventoryItem est dclare comme abstraite, car elle ne possde pas suffisamment de
dtails pour reprsenter un objet complet et autonome. L'utilisateur ne doit pas tre autoris
crer des objets InventoryItem, car InventoryItem n'est qu'une classe partielle. La
classe InventoryItem existe uniquement pour pouvoir tre tendue par des sous-classes
plus spcialises, telles que Movie et Vcr.
Que se passe-t-il si vous tentez d'instancier une classe abstraite ?
Si vous tentez de crer un objet InventoryItem quelque part dans le programme, le
compilateur indique une erreur :
InventoryItem i = new InventoryItem ();// Compiler error
L'utilisateur peut uniquement crer des objets correspondant des sous-classes concrtes :
Movie m = new Movie(); // This is fine
Vcr v = new Vcr(); // This is fine too
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-6
Copyright 2008, Oracle. Tous droits rservs.
Mthodes abstraites
Une mthode abstraite :
est une marque de rservation d'implmentation
fait partie d'une classe abstraite
doit tre redfinie dans une sous-classe concrte
Chaque sous-classe concrte peut implmenter la mthode
diffremment.
Mthodes abstraites
Lors de la conception d'une hirarchie d'hritage, il existe en gnral des comportements que
toutes les classes adoptent, chacune sa manire. Par exemple, dans le cadre d'une activit de
location de DVD, le commerant doit savoir pour chaque article s'il peut ou non tre lou. Par
ailleurs, chaque type d'article dtermine si ce dernier peut tre lou d'une manire spcifique.
Pour reprsenter ce concept en langage Java, la mthode commune "cet article peut-il tre
lou ?" est dfinie dans la classe InventoryItem. Cependant, il n'existe pas
d'implmentation concrte de cette mthode dans InventoryItem, car chaque type
d'article possde ses propres exigences. Une approche pourrait consister laisser la mthode
vide dans la classe InventoryItem :
public abstract class InventoryItem {
public boolean isRentable() {
return true;
}
}
Cette approche n'est pas satisfaisante, car elle ne force pas chaque sous-classe concrte
redfinir la mthode. Par exemple, si l'utilisateur oublie de redfinir la mthode
isRentable() dans la classe Vcr, que se passe-t-il s'il appelle la mthode sur un objet
Vcr ? La mthode isRentable() de InventoryItem est appele et renvoie toujours
true. Il ne s'agit pas du rsultat souhait. La solution consiste dclarer la mthode comme
abstraite, comme indiqu dans la diapositive suivante.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-7
Copyright 2008, Oracle. Tous droits rservs.
Dfinir des mthodes abstraites
Utilisez le mot-cl abstract pour dclarer une
mthode comme tant abstraite :
Indiquez uniquement la signature de la mthode.
Assurez-vous que la classe est galement abstraite.
Quelle en est l'utilit ?
Vous pouvez dclarer la structure d'une classe sans
fournir l'implmentation complte de chaque mthode.
public abstract class InventoryItem {
public abstract boolean isRentable();
}
Lorsque vous dclarez une mthode abstract, vous devez simplement indiquer la
signature de la mthode, qui comprend son nom, la liste de ses arguments et le type de
donnes renvoy. Il n'est pas ncessaire de fournir le corps de la mthode. Chaque sous-classe
concrte doit redfinir la mthode et fournir son propre corps.
A prsent que la mthode est dclare comme tant abstraite, une sous-classe doit fournir une
implmentation de cette mthode.
Les classes abstraites peuvent contenir des mthodes qui ne sont pas dclares comme
abstraites. Ces mthodes peuvent tre redfinies par les sous-classes, mais cela n'est pas
obligatoire.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-8
Copyright 2008, Oracle. Tous droits rservs.
Dfinir et utiliser des interfaces
Une interface est semblable une classe totalement
abstraite.
Toutes ses mthodes sont abstraites.
Toutes les variables sont public static final.
Une interface rpertorie un ensemble de signatures de
mthode, sans aucun code.
Toute classe qui implmente l'interface doit fournir les
dtails du code de toutes les mthodes de l'interface.
Une classe peut implmenter de nombreuses
interfaces, mais ne peut tendre qu'une seule classe.
Dfinir et utiliser des interfaces
Une interface est semblable une classe abstraite, ceci prs qu'elle ne peut comporter ni
variable d'instance, ni mthode concrte. Il s'agit d'une collection de constantes et de
dclarations de mthodes abstraites, c'est--dire de variables static final. C'est en
quelque sorte un contrat que la sous-classe doit respecter.
Toute classe qui implmente une interface doit implmenter tout ou partie des mthodes
indiques dans cette interface. Si elle n'implmente pas toutes les mthodes, la classe est une
classe abstraite. Une sous-classe de la classe abstraite doit implmenter les mthodes
abstraites restantes.
Une classe peut implmenter de nombreuses interfaces, mais ne peut tendre qu'une seule
classe. Le langage Java ne prend pas en charge l'hritage partir de classes multiples, mais il
prend en charge l'implmentation d'interfaces multiples. Par exemple :
class Movie extends InventoryItem implements Sortable, Listable {
}
Comme cela a t illustr prcdemment, la classe Movie hrite de tous les attributs et
comportements de InventoryItem. En outre, elle doit prsent fournir les dtails
d'implmentation de toutes les mthodes dsignes dans les interfaces Sortable et
Listable. Ces mthodes peuvent tre utilises par d'autres classes pour implmenter des
comportements spcifiques (comme une routine de tri).
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-9
Copyright 2008, Oracle. Tous droits rservs.
Exemples d'interfaces
Les interfaces dcrivent un aspect du comportement requis
par diffrentes classes.
Par exemple, les classes qui peuvent tre pilotes prennent
en charge l'interface "pilotable" (Steerable).
Les classes peuvent tre sans lien entre elles.
Pilotable Non pilotable
Exemples d'interfaces
Les interfaces dcrivent un aspect du comportement requis par diffrentes classes. Le nom
d'une interface est souvent un adjectif, par exemple Steerable, Traceable ou
Sortable. Cela le distingue du nom d'une classe, qui est le plus souvent un substantif, tel
que Movie ou Customer.
L'interface Steerable peut inclure des mthodes telles que turnRight(),
turnLeft() ou returnCenter(). Toute classe qui doit pouvoir tre "pilotable" peut
implmenter l'interface Steerable.
Les classes qui implmentent une mme interface peuvent tre totalement dnues de lien
entre elles. Elles peuvent n'avoir qu'une seule chose en commun, savoir la ncessit d'tre
"pilotables".
Par exemple, les packages Java standard incluent un certain nombre d'interfaces standard,
telles que Runnable, Cloneable et ActionListener. Ces interfaces sont
implmentes par tous les types de classe qui n'ont rien d'autre en commun que la ncessit
d'tre Cloneable ou d'implmenter un comportement ActionListener.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-10
Copyright 2008, Oracle. Tous droits rservs.
Crer des interfaces
Utilisez le mot-cl interface :
Toutes les mthodes sont public abstract.
Toutes les variables sont public static final.
public interface Steerable {
int MAXTURN = 45;
void turnLeft(int deg);
void turnRight(int deg);
}
Crer des interfaces
Vous pouvez dfinir une interface l'aide du mot-cl interface. Toutes les mthodes
dsignes dans une interface sont implicitement public et abstract. Toutes les variables
dsignes dans une interface sont implicitement public, static et final. Autrement dit,
il s'agit de constantes.
Ainsi, la dfinition de l'interface illustre dans la diapositive ci-dessus est quivalente la
dfinition ci-aprs, o les mots-cls public, static, final et abstract ont t
indiqus explicitement :
public interface Steerable {
public static final int MAXTURN = 45;
public abstract void turnLeft(int deg);
public abstract void turnRight(int deg);
}
Etant donn que les mthodes d'une interface sont implicitement public et abstract, il
est courant de ne pas utiliser ces modificateurs d'accs. Il en va de mme des variables. Etant
donn qu'elles sont implicitement public, static et final (il s'agit donc de constantes),
il n'est pas ncessaire d'indiquer ces modificateurs.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-11
Copyright 2008, Oracle. Tous droits rservs.
Comparaison entre interfaces
et classes abstraites
Interface
Classe
abstraite
Aucune restriction Les constructeurs sont
appels par des sous-
classes via le chanage de
constructeurs. Une classe
abstraite ne peut pas tre
instancie l'aide de
l'oprateur new.
Aucune restriction
Pas de constructeurs. Une
interface ne peut pas tre
instancie l'aide de
l'oprateur new.
Constructeurs
Toutes les
mthodes doivent
tre public
abstract.
Toutes les variables
doivent tre
public static
final.
Mthodes Variables
Comparaison entre interfaces et classes abstraites
Une interface peut tre utilise de la mme manire qu'une classe abstraite, mais sa
dclaration est diffrente. Le tableau de la diapositive ci-dessus rcapitule les principales
diffrences.
Les classes abstraites comme les interfaces peuvent tre utilises pour modliser des
fonctionnalits communes. Comment choisir entre les deux solutions ? En gnral, une
relation est un(e) forte qui dcrit clairement une relation parent-enfant doit tre modlise
l'aide de classes. Par exemple, un client est une personne, et la relation entre les deux doit tre
modlise via l'hritage de classe. Une relation est un(e) faible, galement appele relation est
une sorte de, indique qu'un objet possde une proprit particulire. Elle peut tre modlise
l'aide d'interfaces. Par exemple, toutes les chanes sont comparables, de sorte que la classe
String implmente l'interface Comparable.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-12
Copyright 2008, Oracle. Tous droits rservs.
Implmenter des interfaces
Utilisez le mot-cl implements :
public class Yacht extends Boat
implements Steerable {
public void turnLeft(int deg) {}
public void turnRight(int deg) {}
}
Implmenter des interfaces
La diapositive ci-dessus prsente un exemple de classe Yacht qui implmente l'interface
Steerable. La classe Yacht doit implmenter l'ensemble ou une partie des mthodes de
toute interface qu'elle implmente. Dans le cas prsent, Yacht peut implmenter
turnLeft() et turnRight().
Une classe peut implmenter plusieurs interfaces. Il suffit d'indiquer la liste de ces interfaces,
spares par des virgules. Examinons l'exemple suivant :
public class Yacht
extends Boat
implements Steerable, Taxable {
}
Ici, la classe Yacht implmente deux interfaces, savoir Steerable et Taxable. Cela
signifie que la classe Yacht doit implmenter toutes les mthodes dclares dans les
interfaces Steerable et Taxable.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-13
Copyright 2008, Oracle. Tous droits rservs.
Tri : Exemple concret
Caractristiques du tri :
Utilis par plusieurs classes non lies
Contient un ensemble connu de mthodes
Est ncessaire pour trier n'importe quel type d'objet
Utilise des rgles de comparaison connues uniquement
de l'objet pouvant tre tri
Permet la rutilisation du code
Tri : Exemple concret
Le tri est un exemple classique d'utilisation d'une interface. De nombreuses classes totalement
indpendantes doivent utiliser un tri. Il s'agit d'un processus bien connu et bien dfini, qu'il
n'est pas ncessaire de rcrire chaque fois.
Une routine de tri doit permettre de trier n'importe quel objet, de la manire adapte cet
objet particulier. L'approche de programmation traditionnelle conduirait crire un certain
nombre de sous-programmes et un arbre de dcision sans cesse croissant pour grer chaque
nouveau type d'objet. Grce aux techniques et interfaces de programmation oriente objet,
vous pouvez liminer tous les soucis de maintenance lis l'approche traditionnelle.
L'interface Sortable dsigne les mthodes requises pour faire en sorte que le tri fonctionne
sur chaque type d'objet devant tre tri. Chaque classe implmente l'interface en fonction de
ses besoins spcifiques en termes de tri. Seule la classe doit connatre ses rgles de
comparaison ou de tri.
L'implmentation du tri selon une approche oriente objet fournit un modle qui optimise la
rutilisation du code. Le code du tri est totalement isol des objets qui implmentent le tri.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-14
Copyright 2008, Oracle. Tous droits rservs.
Prsentation des classes
Cres par l'expert en tri :
Cres par l'expert en cinma :
public class
MyApplication
public class Movie
implements Sortable
public interface
Sortable
public abstract
class Sort
Prsentation des classes
La diapositive ci-dessus prsente les trois classes et l'interface unique impliques dans le tri
d'une liste de DVD. Les classes sont rparties en deux catgories :
Les classes cres par l'expert en tri, qui sait tout sur les algorithmes de tri, mais rien sur
les objets individuels que les utilisateurs peuvent tre amens trier.
Les classes cres par l'expert en cinma, qui sait tout sur les films, mais rien sur les
algorithmes de tri.
Vous allez voir comment les interfaces peuvent dissocier ces deux types de dveloppeur,
permettant ainsi la sparation des domaines fonctionnels distincts.
Classes et interfaces utilises dans l'exemple
L'interface Sortable dclare une mthode : compare(). Cette mthode doit tre
implmente par toute classe qui souhaite utiliser les mthodes de la classe Sort.
La classe Sort est une classe abstract qui contient sortObjects(), une mthode
permettant de trier un tableau d'objets. La plupart des algorithmes de tri fonctionnent par
comparaison de paires d'objets. sortObjects() effectue cette comparaison en
appelant la mthode compare() sur les objets du tableau.
La classe Movie implmente l'interface Sortable. Elle contient une mthode
compare() qui compare deux objets Movie.
MyApplication reprsente une application qui doit trier une liste de films. Il peut
s'agir d'un panneau qui affiche une liste de films trier.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-15
Copyright 2008, Oracle. Tous droits rservs.
Fonctionnement du tri
MyApplication
transmet un tableau
de films
Sort.sortObjects().
sortObjects()
demande un film
de se comparer
un autre film.
Le film renvoie
le rsultat de la
comparaison.
La mthode
sortObjects()
renvoie la liste
trie.
1
2 3
4
Sort
Movie
MyApplication
Fonctionnement du tri
La diapositive ci-dessus illustre le processus de tri d'une liste d'objets. La procdure est la
suivante :
1. L'application principale transmet un tableau de films la mthode
Sort.sortObjects().
2. La mthode sortObjects() trie le tableau. Chaque fois qu'elle doit comparer deux
films, elle appelle la mthode compare() d'un film et la transmet en indiquant l'autre
film comme paramtre.
3. Le rsultat de la comparaison est renvoy la mthode sortObjects().
4. La mthode sortObjects() renvoie la liste trie.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-16
Copyright 2008, Oracle. Tous droits rservs.
Interface Sortable
Elle dsigne la mthode compare() :
public interface Sortable {
// compare(): Compare this object to another object
// Returns:
// 0 if this object is equal to obj2
// a value < 0 if this object < obj2
// a value > 0 if this object > obj2
int compare(Object obj2);
}
Interface Sortable
L'interface Sortable dsigne toutes les mthodes et constantes requises pour qu'une classe
puisse tre trie. Dans l'exemple de la diapositive ci-dessus, la seule mthode est
compare().
Toute classe qui implmente Sortable doit fournir une mthode compare() qui accepte
un argument Object et qui renvoie une valeur de type int.
Le rsultat de la mthode compare() est le suivant :
Remarque : La classe qui implmente la mthode compare() est charge de dterminer la
signification de "suprieur ", "infrieur " et "gal ".
Valeur Signification
Entier positif Cet objet est suprieur l'argument.
Entier ngatif Cet objet est infrieur l'argument.
Zro Cet objet est gal l'argument.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-17
Copyright 2008, Oracle. Tous droits rservs.
Classe Sort
Contient la mthode sortObjects() :
public abstract class Sort {
public static void sortObjects(Sortable[] items) {
// Step through the array comparing and swapping;
// do this length-1 times
for (int i = 1; i < items.length; i++) {
for (int j = 0; j < items.length - 1; j++) {
if (items[j].compare(items[j+1]) > 0) {
Sortable tempitem = items[j+1];
items[j+1] = items[j];
items[j] = tempitem; } } } } }
Classe Sort
La classe Sort contient la mthode sortObjects() qui trie un tableau d'objets
Sortable. Cette mthode accepte un tableau d'objets Sortable comme argument. Il est
possible de dsigner un type d'interface comme argument d'une mthode, ce qui permet de
s'assurer que la mthode ne sera sollicite que pour trier des objets qui implmentent
l'interface Sortable. Dans l'exemple, la mthode sortObjects() excute un simple tri
qui balaie plusieurs fois le tableau et qui compare chaque lment au suivant, en effectuant les
permutations ncessaires.
Lorsque la mthode sortObjects() doit comparer deux lments du tableau, elle appelle
compare() sur l'un des deux lments, en transmettant l'autre comme argument.
Notez que la mthode sortObjects() ne sait rien sur le type d'objet qu'elle trie. Elle sait
seulement qu'il s'agit d'objets Sortable et qu'elle peut donc appeler la mthode
compare() sur n'importe lequel. Elle sait galement interprter les rsultats.
L'interface en tant que contrat
Vous pouvez considrer une interface comme un contrat entre l'objet qui l'utilise et celui qui
l'implmente. Dans l'exemple considr, le contrat est le suivant :
La classe Movie (l'implmenteur) s'engage implmenter une mthode appele
compare(), avec les paramtres et la valeur renvoye indiqus par l'interface.
La classe Sort (l'utilisateur) s'engage trier une liste d'objets dans l'ordre correct.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-18
Copyright 2008, Oracle. Tous droits rservs.
Classe Movie
Elle implmente l'interface Sortable :
public class Movie extends InventoryItem
implements Sortable {
String title;
public int compare(Object movie2) {
String title1 = this.title;
String title2 = ((Movie)movie2).getTitle();
return(title1.compareTo(title2));
}
}
Classe Movie
La classe Movie implmente l'interface Sortable. Pour appeler la mthode
Sort.sortObjects(), elle doit implmenter l'interface Sortable, et dans ce cas, elle
doit galement implmenter la mthode compare() selon les termes du contrat. La mthode
compare() utilise un objet comme argument et le compare l'objet pour lequel elle a t
appele.
Dans ce cas, la mthode String compareTo() est utilise pour comparer les deux chanes
de titre. Cette mthode renvoie un entier positif, un entier ngatif ou zro, selon l'ordre relatif
des deux objets. Lors de l'implmentation de la mthode compare(), vous pouvez comparer
les deux objets de la faon souhaite, ds lors que vous renvoyez un entier qui indique l'ordre
de tri relatif.
Remarque : Dans l'exemple, movie2 est de type Object et doit donc tre converti en
Movie avant tout appel de getTitle() pour obtenir son titre.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-19
Copyright 2008, Oracle. Tous droits rservs.
Utiliser le tri
Appelez la mthode Sort.sortObjects(Sortable [])
avec un tableau d'objets Movie comme argument :
class myApplication {
Movie[] movielist;
// build the array of Movie
Sort.sortObjects(movielist);
}
Utiliser le tri
Pour utiliser le tri, il suffit d'appeler la mthode Sort.sortObjects(Sortable [])
partir de l'application, en transmettant le tableau des objets que vous souhaitez trier. Chaque
objet que vous souhaitez trier doit implmenter l'interface Sortable et fournir la mthode
compare() requise. Seule la classe qui implmente l'interface Sortable sait exactement
comment ses objets sont tris.
Vous pouvez rendre "triables" d'autres types d'objet de votre application. Par exemple, vous
pouvez faire en sorte que les classes Rental et Member implmentent l'interface
Sortable, et ajouter une mthode compare() chaque classe. Vous pouvez ensuite trier
un tableau d'objets Rental ou Member en appelant la mthode Sort.sortObjects().
La mthode compare() de chaque classe peut tre totalement diffrente ou
fondamentalement identique. La seule exigence est que les mthodes compare() doivent
renvoyer un entier pour indiquer l'ordre de tri relatif des objets.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 13-20
Copyright 2008, Oracle. Tous droits rservs.
Utiliser instanceof avec des interfaces
Utilisez l'oprateur instanceof pour dterminer si un
objet implmente une interface.
Utilisez la conversion en un type plus spcifique pour
appeler les mthodes dfinies dans l'interface :
public void aMethod(Object obj) {
try
catch (Exception e) {}
catch (IndexOutOfBoundsException e) {}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-19
Copyright 2008, Oracle. Tous droits rservs.
Laisser une exception se transmettre la
mthode appelante
Utilisez throws dans la dclaration de la mthode.
L'exception se propage la mthode appelante.
public int myMethod() throws exception1 {
// code that might throw exception1
}
public URL changeURL(URL oldURL)
throws MalformedURLException {
return new URL("http://www.oracle.com");
}
Laisser une exception se transmettre la mthode appelante
Si vous ne pouvez pas traiter une exception localement de faon satisfaisante, ou si vous
choisissez de ne pas le faire, l'exception peut tre renvoye au code qui a appel la mthode.
Dans l'exemple de la diapositive ci-dessus, le constructeur de l'URL peut gnrer une
exception MalformedURLException, mais la mthode ne dtecte pas cette exception
localement. En revanche, l'exception est transmise automatiquement la mthode qui a
appel changeURL().
Si vous souhaitez qu'une exception se propage la mthode appelante, vous devez la dclarer
dans la dclaration de la mthode :
public URL changeURL(URL oldURL) throws MalformedURLException
{
}
La mthode qui appelle changeURL() peut dtecter MalformedURLException ou
permettre la transmission de l'exception. Si la mthode appelante permet la transmission de
l'exception, elle doit galement contenir throws MalformedURLException dans sa
dclaration.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-20
Copyright 2008, Oracle. Tous droits rservs.
Gnrer des exceptions
Gnrez des exceptions l'aide du mot-cl throw.
Utilisez throws dans la dclaration de la mthode.
public String getValue(int index) throws
IndexOutOfBoundsException {
if (index < 0 || index >= values.length) {
throw new IndexOutOfBoundsException();
}
}
throw new Exception1();
Gnrer des exceptions
Vous pouvez gnrer des exceptions dans votre code afin de signaler une situation anormale.
Vous pouvez utiliser les exceptions systme standard, mais vous pouvez galement crer vos
propres exceptions.
Dans ce cas, rappelez-vous que vous allez en ralit crer un objet et le transmettre une
mthode de niveau suprieur. Par consquent, vous devez crer cet objet exception l'aide de
l'oprateur new, comme illustr dans la diapositive ci-dessus.
Une mthode peut gnrer plusieurs exceptions, auquel cas les noms d'exception sont spars
par des virgules.
Il existe quatre types d'exception :
System
Application
Run-time
Custom
L'exception java.lang.IndexOutOfBoundsException est de type Run-time.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-21
Copyright 2008, Oracle. Tous droits rservs.
Crer des exceptions
Etendez la classe Exception :
public class UserFileException extends Exception {
public UserFileException (String message) {
super(message);
}
}
Crer des exceptions
Vous pouvez crer vos propres exceptions en tendant la classe Exception. Vous ne devez
pas tendre la classe RuntimeException, car celle-ci est destine aux exceptions
communes dont le contrle n'est pas ncessaire.
L'exemple de la diapositive ci-dessus cre une exception appele UserFileException
avec un seul constructeur, qui appelle le constructeur de la superclasse.
Vous pouvez crer plusieurs exceptions pour diffrents scnarios dans votre code. Par
exemple, si votre code accde diffrents fichiers, vous pouvez gnrer une exception
diffrente pour chaque fichier. Cette approche est utile pour plusieurs raisons :
Vous pouvez traiter chaque exception diffremment.
Si vos gestionnaires d'exceptions affichent l'exception, vous ou vos utilisateurs disposez
de plus d'informations sur l'endroit o l'exception s'est produite.
Vous pouvez personnaliser votre exception. Par exemple, vous pouvez ajouter un
constructeur UserFileException qui dfinit un attribut pour le numro de ligne du
fichier et une mthode qui affiche le numro de la ligne.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-22
Copyright 2008, Oracle. Tous droits rservs.
Dtecter une exception et gnrer
une autre exception
catch (exception1 e) {
throw new exception2();
}
void readUserFile() throws UserFileException {
try {
// code to open and read userfile
}
catch(IOException e) {
throw new UserFileException(e.toString());
}
}
Dtecter une exception et gnrer une autre exception
L'exemple de la diapositive ci-dessus dtecte une exception IOException et la traite en
gnrant l'exception UserFileException. Vous pouvez procder ainsi si vous souhaitez
que cette mthode gnre une exception diffrente des autres mthodes. La mthode utilise le
mot-cl throws dans sa dclaration afin d'indiquer qu'elle gnre une exception
UserFileException.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-23
Copyright 2008, Oracle. Tous droits rservs.
Synthse
Ce chapitre vous a permis d'apprendre :
utiliser les exceptions Java pour implmenter une
gestion robuste des erreurs
traiter les exceptions l'aide des blocs try, catch et
finally
utiliser le mot-cl throw pour gnrer une exception
utiliser une mthode pour dclarer une exception dans
sa signature afin de la transmettre la pile d'appels
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 14-24
Copyright 2008, Oracle. Tous droits rservs.
Prsentation de l'exercice 14 :
Gnrer et dtecter les exceptions
Dans cet exercice, vous allez :
crer une exception personnalise
modifier les mthodes de recherche de DataMan afin
de gnrer des exceptions
traiter les exceptions lors de l'appel des mthodes de
recherche de DataMan
tester les modifications apportes au code
Prsentation de l'exercice 14 : Gnrer et dtecter les exceptions
Dans cet exercice, vous allez apprendre crer vos propres classes d'exception, gnrer un
objet exception l'aide de votre propre classe et traiter les exceptions.
Remarque : Si vous avez effectu l'exercice prcdent avec succs, poursuivez avec le mme
rpertoire et les mmes fichiers. Si la compilation de l'exercice prcdent a chou et que
vous souhaitez passer ce nouvel exercice, accdez au rpertoire les14, chargez
l'application OrderEntryApplicationLes14, puis continuez.
Afficher le modle : Pour afficher le modle de l'application du cours jusqu' cet exercice,
chargez l'application OrderEntryApplicationLes14. Dans la fentre Application
Navigator, dveloppez OrderEntryApplicationLes14
OrderEntryProjectLes14 - Application Sources oe, puis cliquez deux
fois sur l'entre UML Class Diagram1. Le diagramme affiche toutes les classes cres
jusqu' prsent dans le cours.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Copyright 2008, Oracle. Tous droits rservs.
Utiliser JDBC pour accder la base de donnes
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-2
Copyright 2008, Oracle. Tous droits rservs.
Objectifs
A la fin de ce chapitre, vous pourrez :
dcrire la faon dont le code Java se connecte la base
de donnes
dcrire la faon dont les fonctionnalits de base de
donnes Java sont prises en charge par la base Oracle
charger un pilote JDBC et l'enregistrer
vous connecter une base de donnes Oracle
excuter une instruction SELECT simple
mettre des types de base de donnes Oracle simples en
correspondance avec des types Java
utiliser une connexion appartenant un pool
Objectifs du chapitre
Si votre entreprise utilise une base Oracle pour stocker ses donnes, votre application Java
doit tre capable de communiquer avec cette base. Ce chapitre vous apprend utiliser JDBC
(Java Database Connectivity) pour interroger une base de donnes partir d'une classe Java.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-3
Copyright 2008, Oracle. Tous droits rservs.
Java, Java EE et Oracle 11g
Base de
donnes
Oracle
Serveur
Web Client
Serveur
d'applications
Prsentation
Logique
mtier
Donnes
Oracle Application Server 11g
Environnement
certifi Java EE
JDBC
Java, Java EE et Oracle 11g
Oracle offre une plate-forme complte et intgre, appele Oracle 11g, qui prend en charge
l'ensemble des exigences des applications Java ct serveur. Elle est constitue des
composants suivants :
Oracle Database 11g
Outre ses fonctions de gestion de base de donnes, la base Oracle (actuellement Oracle
Database 11g) prend en charge des structures fondes sur Java, notamment des composants
Java et des procdures Java stockes. Ces structures Java sont excutes dans la base de
donnes par la JVM intgre, appele Oracle Java Virtual Machine (Oracle JVM).
Oracle Application Server 11g
Oracle Application Server 11g gre et excute toute la logique applicative, y compris les
composants Enterprise JavaBean, l'aide d'EJE (Enterprise Java Engine), sa propre JVM
intgre.
Utiliser Java EE avec Oracle 11g
Java EE est une technologie standard qui fournit un ensemble d'API et une infrastructure
d'excution pour l'hbergement et la gestion des applications. Elle dfinit des rles et des
interfaces pour les applications, ainsi que les services d'excution sur lesquels les applications
peuvent tre dployes. Les dveloppeurs d'applications peuvent donc se concentrer sur la
logique applicative et les services associs, tout en exploitant les services d'excution pour
tous les services lis l'infrastructure.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-4
Copyright 2008, Oracle. Tous droits rservs.
Application client
ou applet client
Se connecter une base de donnes avec Java
Les applications client, les pages JSP et les servlets utilisent JDBC.
JDBC Base de
donnes
relationnelle
Se connecter une base de donnes avec Java
Pour pouvoir interroger une base de donnes Oracle, une application Java doit disposer d'un
moyen de se connecter celle-ci. JDBC (Java Database Connectivity) est une API
(Application Programming Interface) standard utilise pour connecter une application Java
des bases de donnes relationnelles. Le protocole rseau dpend du pilote JDBC utilis. Par
exemple, le pilote OCI (Oracle Call Interface) utilise Oracle Net, tandis que le pilote thin
utilise TCP/IP.
Excuter des instructions SQL partir d'une application ct serveur
Les procdures Java figurant dans la base de donnes utilisent JDBC pour excuter leurs
interrogations SQL. Il s'agit notamment des procdures Java stockes.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-5
Copyright 2008, Oracle. Tous droits rservs.
JDBC est une API standard qui permet de se connecter
des bases de donnes relationnelles partir de Java.
L'API JDBC inclut le package d'API standard dans
java.sql.
L'API JDBC 2.0 inclut le package d'API facultatif dans
javax.sql.
L'API JDBC 3.0 inclut le package d'API standard et le
package d'API facultatif.
Vous devez indiquer l'archive du pilote JDBC Oracle dans
CLASSPATH.
La bibliothque de classes JDBC fait partie de Java SE
(Java Platform - Standard Edition).
JDBC (Java Database Connectivity)
JDBC (Java Database Connectivity)
Le package java.sql contient un ensemble d'interfaces qui dfinissent l'API JDBC. Ce
package fait partie de J2SE (Java 2 - Standard Edition). Les fournisseurs de bases de donnes
implmentent ces interfaces de diffrentes manires, mais l'API JDBC proprement dite est
standard.
JDBC permet d'crire du code pour effectuer les oprations suivantes :
Connexion un ou plusieurs serveurs de donnes
Excution d'instructions SQL
Obtention d'un ensemble de rsultats dans lequel vous pouvez naviguer
Obtention de mtadonnes partir du serveur de donnes
Chaque fournisseur de bases de donnes propose un ou plusieurs pilotes JDBC. Le pilote
JDBC implmente les interfaces du package java.sql, fournissant ainsi le code permettant
la connexion une base de donnes spcifique et son interrogation.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-6
Copyright 2008, Oracle. Tous droits rservs.
// Packages standard
import java.sql.*;
import java.math.*; // optional
// Extension Oracle des packages JDBC
import oracle.jdbc.*;
import oracle.sql.*;
Prparer l'environnement
Importez les packages JDBC.
Incluez les classes de pilote JDBC dans la configuration
de CLASSPATH.
Conditions pralables l'utilisation d'Oracle JDBC
Votre classe Java doit importer java.sql.* pour pouvoir utiliser les classes JDBC. Vous
devez en outre inclure dans la configuration de CLASSPATH les classes de pilote JDBC du
fournisseur de la base de donnes.
Dans JDeveloper, vous ajoutez la bibliothque Oracle JDBC votre projet pour inclure dans
votre variable CLASSPATH les fichiers .jar ncessaires.
Utilisez la bote de dialogue Project Properties pour ajouter la bibliothque.
Pilote JDBC OCI
Si vous installez le pilote JDBC OCI, vous devez galement affecter la valeur suivante la
variable d'environnement dfinissant le chemin des bibliothques : [Oracle Home]/lib.
Remarque concernant l'extension Oracle des packages JDBC : Les extensions standard
sont dsormais appeles packages facultatifs. Un package facultatif est un groupe de packages
fourni en un ou plusieurs fichiers JAR qui implmente une API tendant la plate-forme Java.
L'implmentation d'un package facultatif peut se composer de code crit dans le langage de
programmation Java et, mais plus rarement, de code natif spcifique la plate-forme. Dans ce
cas, le package facultatif contient du code propre l'implmentation Oracle de JDBC.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-7
Copyright 2008, Oracle. Tous droits rservs.
Procdure d'utilisation de JDBC pour excuter
des instructions SQL
1. Enregistrer le pilote JDBC
4. Excuter l'instruction SQL
4b. Traiter l'instruction
LMD ou LDD
6. Nettoyer
5. Traiter les rsultats
de l'interrogation
3. Crer un objet Statement
2. Obtenir un objet Connection
4a. Coder l'instruction
d'interrogation
Procdure d'utilisation de JDBC pour excuter des instructions SQL
La procdure est la suivante :
1. Chargez et enregistrez le pilote. (Utilisez pour cela la classe
java.sql.DriverManager.)
2. Obtenez un objet Connection. (Utilisez pour cela la mthode getConnection() de la
classe java.sql.DriverManager.)
3. Crez un objet Statement. (Utilisez l'objet Connection.)
4. Excutez une interrogation, une instruction LMD ou LDD. (Utilisez l'objet
Statement.)
5. Si vous obtenez un objet ResultSet lors de l'excution d'une interrogation, procdez
une itration sur ResultSet pour traiter les donnes de chaque ligne satisfaisant
l'interrogation.
6. Fermez les objets ResultSet, Statement et Connection lorsque l'opration est
termine.
Traiter les exceptions
Lorsque vous utilisez JDBC, toutes les mthodes qui accdent la base de donnes gnrent
l'exception SQLException en cas de problme. Pour traiter ce type d'erreur, vous devez
placer le code dans un bloc try-catch.
SQLException comporte un certain nombre de mthodes que vous pouvez appeler pour
obtenir des informations sur l'exception, notamment :
getMessage() renvoie une chane qui dcrit l'erreur.
getErrorCode() extrait le code d'exception propre au fournisseur.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-8
Copyright 2008, Oracle. Tous droits rservs.
Etape 1 : Enregistrer le pilote
Enregistrer le pilote dans le code :
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
Class.forName ("oracle.jdbc.OracleDriver");
Enregistrer le pilote lors du lancement de la classe :
java
-Djdbc.drivers=oracle.jdbc.OracleDriver
<ClassName>;
Etape 1 : Enregistrer le pilote
Les pilotes JDBC doivent s'enregistrer eux-mmes l'aide du gestionnaire de pilotes. Pour
cela, deux choix s'offrent vous :
Utiliser la mthode registerDriver() de la classe DriverManager
Utiliser la mthode forName() de la classe java.lang.Class afin de charger les
pilotes JDBC directement, de la faon suivante :
try {
Class.forName("oracle.jdbc.OracleDriver");
}
catch (ClassNotFoundException e) {}
L'utilisation de la mthode Class.forName() appelle l'initialiseur statique de la classe du
pilote. Cette dernire ne doit pas ncessairement tre prsente lors de la compilation.
Cependant, cette mthode n'est valide que pour les JVM compatibles avec le kit JDK.
Vous pouvez enregistrer le pilote lors de l'excution. Dans ce cas, les instructions
d'enregistrement ventuellement prsentes dans la classe Java sont ignores.
Exemple d'utilisation de l'option Djdbc dans la ligne de commande :
C:>java Djdbc.drivers=oracle.jdbc.OracleDriver MyClass
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-9
Copyright 2008, Oracle. Tous droits rservs.
Grce au package oracle.jdbc.driver, Oracle fournit
diffrents pilotes pour tablir une connexion la base de
donnes.
Appels JDBC
Commandes
de base de
donnes
Base de
donnes
Se connecter la base de donnes
Pilote Oracle
Client lger
Bas sur OCI
Bas sur serveur
A propos des pilotes JDBC
Un pilote JDBC implmente les interfaces du package java.sql, fournissant ainsi le code
permettant la connexion une base de donnes spcifique et l'interrogation de celle-ci. Le
pilote JDBC peut galement fournir les extensions propres au fournisseur. Les pilotes Oracle
fournissent des extensions permettant la prise en charge des types de donnes Oracle
spciaux.
Oracle fournit trois pilotes :
Pilote pour les clients lgers
Pilote bas sur OCI
Pilote bas sur serveur
Le pilote Oracle JDBC rside dans le fichier classes12.jar pour JDBC 2.0 (et les
versions ultrieures). Ce fichier d'archive contient les classes permettant la prise en charge des
pilotes JDBC thin et OCI.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-10
Copyright 2008, Oracle. Tous droits rservs.
Client
Pilotes Oracle JDBC : Pilote pour les clients lgers
Il est crit intgralement en langage Java.
Il doit tre utilis par des applets.
Serveur
Oracle
Applet
JDBC
Pilote thin
Pilote pour les clients lgers
Ce pilote peut se connecter une base Oracle 11g, mais galement une base Oracle8i ou
Oracle9i. Afin de garantir une portabilit maximale, vous devez utiliser ce pilote si vous
dveloppez une application client pouvant se connecter diffrentes versions d'une base de
donnes Oracle.
Pour communiquer avec la base, le pilote pour les clients lgers utilise une version allge
d'Oracle*Net via TCP/IP, laquelle peut tre tlcharge sur le client lors de l'excution.
Le pilote Oracle JDBC thin est un pilote 100 % Java, de type IV. Il est destin aux applets
Oracle JDBC, mais peut galement tre utilis pour les applications. Etant donn qu'il est crit
intgralement en langage Java, ce pilote est indpendant de la plate-forme. Il ne ncessite
aucun logiciel Oracle supplmentaire ct client. Le pilote thin communique avec le serveur
via le protocole TTC (Two-Task Common), dvelopp par Oracle pour accder au systme de
gestion de base de donnes relationnelle (SGBDR) Oracle.
Le pilote JDBC thin permet une connexion directe la base de donnes, via une
implmentation de TCP/IP qui mule Oracle Net et TTC (le protocole filaire utilis par OCI)
sur les sockets Java. Ces deux protocoles sont des versions allges de leur homologue sur le
serveur. Le protocole Oracle Net s'excute uniquement sur TCP/IP.
Remarque : Lorsque le pilote JDBC thin est utilis avec une applet, le navigateur client doit
tre en mesure de prendre en charge les sockets Java.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-11
Copyright 2008, Oracle. Tous droits rservs.
Application
JDBC
Pilote OCI
Pilotes Oracle JDBC : Pilote de client OCI
Il est crit en langage C et Java.
Il doit tre install sur le client.
Client Serveur
Oracle
ocixxx.dll
Pilote de client OCI
Pilote JDBC OCI
C'est un pilote de type II destin une utilisation avec les applications Java
client-serveur.
Il ncessite une installation client Oracle. Il est donc propre la plate-forme Oracle et ne
convient pas aux applets.
Il fournit une fonctionnalit de concentration des connexions OCI qui peut faire partie du
client JDBC ou d'une procdure JDBC stocke.
Il prend en charge Oracle7, Oracle8/8i, Oracle9i, Oracle 10g et Oracle 11g avec le niveau
de compatibilit le plus lev. Il prend galement en charge tous les adaptateurs Oracle
Net installs, notamment IPC, les canaux nomms (named pipes), TCP/IP et IPX/SPX.
Il est crit dans une combinaison des langages Java et C, il convertit les appels JDBC en
appels OCI (Oracle Call Interface) en utilisant des mthodes natives pour appeler les
points d'entre C. Ces appels sont envoys via Oracle Net au serveur de bases de donnes
Oracle. Le pilote JDBC OCI communique avec le serveur l'aide du protocole TTC
dvelopp par Oracle.
Il utilise les bibliothques OCI, les points d'entre C, Oracle Net, les bibliothques CORE
et les autres fichiers ncessaires sur l'ordinateur client sur lequel il est install.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-12
Copyright 2008, Oracle. Tous droits rservs.
Choisir le pilote appropri
Applet
Application client
EJB, servlet
sur le niveau intermdiaire (middle-tier)
Procdure stocke
OCI Thin
Pilote
Thin
Ct serveur
OCI
Thin
Type de programme
Choisir le pilote appropri
Tenez compte des lments suivants lorsque vous choisissez le pilote JDBC utiliser pour
votre application ou applet :
Si vous crivez une applet, vous devez utiliser le pilote JDBC thin. Les classes de pilote
JDBC bases sur OCI ne fonctionnent pas dans un navigateur Web, car elles appellent
des mthodes natives (en langage C).
Si vous souhaitez une portabilit et des performances maximales sur la plate-forme
Oracle 10g (et les versions antrieures), utilisez le pilote JDBC thin. Vous pouvez vous
connecter un serveur Oracle partir d'une application ou d'une applet via le pilote
JDBC thin.
Si vous crivez une application client pour un environnement client Oracle et que vous
avez besoin de performances maximales, choisissez le pilote JDBC OCI.
Si les performances sont essentielles pour votre application, que vous souhaitez une
volutivit maximale du serveur Oracle ou que vous avez besoin des fonctionnalits de
disponibilit amliores telles que la gestion transparente des incidents (TAF), ou des
fonctionnalits de proxy amliores telles que l'authentification via le niveau
intermdiaire (middle-tier), optez pour le pilote JDBC OCI.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-13
Copyright 2008, Oracle. Tous droits rservs.
Etape 2 : Obtenir une connexion de base de donnes
Dans JDBC 1.0, utilisez la classe DriverManager,
qui fournit des mthodes getConnection()
surcharges.
Toutes les mthodes de connexion ncessitent une
URL JDBC pour indiquer les dtails de connexion.
Exemple :
Les fournisseurs peuvent proposer plusieurs types de
pilote JDBC.
Connection conn =
DriverManager.getConnection(
"jdbc:oracle:thin:@myhost:1521:ORCL",
"scott","tiger");
Obtenir une connexion de base de donnes
Utilisez la classe DriverManager pour crer une connexion en appelant la mthode
getConnection().
La mthode getConnection() est surcharge, comme le montre l'exemple ci-dessous :
getConnection(String url)
getConnection(String url, Properties props), o les proprits
doivent inclure au moins une valeur pour les lments suivants : user et password
getConnection(String url, String user, String password)
Dans chaque cas, vous devez indiquer une chane de type URL (qui identifie le pilote JDBC
enregistr utiliser) ainsi que la chane de connexion la base de donnes et le mot de passe,
si ncessaire.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-14
Copyright 2008, Oracle. Tous droits rservs.
URL JDBC
JDBC utilise une chane de type URL qui identifie :
le pilote JDBC utiliser pour la connexion
les dtails de connexion la base de donnes,
qui dpendent du pilote utilis
Exemple utilisant le pilote Oracle JDBC thin :
jdbc:oracle:thin:@myhost:1521:ORCL
jdbc:<subprotocol>:<subname>
jdbc:oracle:<driver>:@<database>
Protocole
Identification de
la base de donnes
URL JDBC
JDBC utilise une URL pour identifier la connexion de base de donnes. Une URL JDBC se
prsente diffremment d'une URL HTTP ou FTP. Cependant, comme n'importe quelle URL,
il s'agit d'un pointeur vers une ressource particulire (une base de donnes dans le cas
prsent). La structure d'une URL JDBC est flexible, ce qui permet au crateur du pilote
d'indiquer ce qu'il faut inclure dans l'URL. L'utilisateur final doit connatre la structure
employe par le fournisseur.
La diapositive ci-dessus prsente la syntaxe gnrale d'une URL JDBC, ainsi que la syntaxe
utilise par Oracle pour la connexion avec un pilote Oracle. La syntaxe gnrale d'une URL
JDBC est la suivante :
jdbc:<subprotocol>:<subname>
jdbc est le protocole. Toutes les URL commencent par le protocole.
<subprotocol> est le nom d'un pilote ou d'un mcanisme de connexion la base de
donnes. Les dveloppeurs de pilotes enregistrent leurs sous-protocoles avec JavaSoft
afin de s'assurer que personne d'autre n'utilise le mme nom de sous-protocole. Pour tous
les pilotes Oracle JDBC, le sous-protocole est oracle.
<subname> identifie la base de donnes. La structure et le contenu de cette chane sont
dtermins par le dveloppeur du pilote. Dans le cas de pilotes Oracle JDBC, cette chane
est <driver>:@<database>, o :
- <driver> est le pilote
- <database> indique les informations de connexion la base de donnes
Les diapositives qui suivent dcrivent la syntaxe d'une URL Oracle JDBC pour les diffrents
pilotes JDBC, pour le code des applications Java ct client.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-15
Copyright 2008, Oracle. Tous droits rservs.
URL JDBC avec pilotes Oracle
Pilote Oracle JDBC Thin
Pilote Oracle JDBC OCI
Syntaxe : jdbc:oracle:thin:@<host>:<port>:<SID>
Exemple : "jdbc:oracle:thin:@eduhost:1521:orcl"
Syntaxe : jdbc:oracle:oci:@<tnsname entry>
Exemple : "jdbc:oracle:oci:@orcl"
URL JDBC avec pilotes Oracle
La structure de base de l'URL JDBC permettant la connexion une base de donnes avec l'un
des pilotes Oracle JDBC est jdbc:<subprotocol>:<driver>:<database>.
Pilote Oracle JDBC Thin
<driver> est thin.
<database> est une chane au format <host>:<port>:<sid>. Autrement dit, il s'agit
du nom d'hte, du port TCP/IP et du SID Oracle de la base de donnes laquelle vous
souhaitez vous connecter.
Exemple : jdbc:oracle:thin:@eduhost:1521:ORCL
Pilote Oracle JDBC OCI
<driver> a la valeur oci, oci8 ou oci7, selon le pilote OCI que vous utilisez.
<database> est une entre TNSNAMES du fichier tnsnames.ora.
Exemple : jdbc:oracle:oci:@eduhost
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-16
Copyright 2008, Oracle. Tous droits rservs.
Etape 3 : Crer une instruction
Les objets Statement JDBC sont crs partir de l'instance
Connection.
Utilisez la mthode createStatement(), qui fournit
un contexte pour l'excution d'une instruction SQL.
Exemple :
Connection conn =
DriverManager.getConnection(
"jdbc:oracle:thin:@myhost:1521:ORCL",
"scott","tiger");
Statement stmt = conn.createStatement();
Crer une instruction
La mthode execute() est utile pour l'excution dynamique d'une chane SQL inconnue.
JDBC fournit deux autres objets Statement :
PreparedStatement, pour les instructions SQL prcompiles.
CallableStatement, pour les instructions qui excutent des procdures stockes.
Objets et interfaces
java.sql.Statement est une interface et non une classe. Lorsque vous dclarez un objet
Statement et l'initialisez l'aide de la mthode createStatement(), vous crez
l'implmentation de l'interface Statement fournie par le pilote Oracle que vous utilisez.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-17
Copyright 2008, Oracle. Tous droits rservs.
Utiliser l'interface Statement
L'interface Statement fournit trois mthodes pour
l'excution d'instructions SQL :
executeQuery(String sql) pour les instructions
SELECT
Renvoie un objet ResultSet pour le traitement des
lignes
executeUpdate(String sql) pour les instructions
LMD ou LDD
Renvoie une valeur int
execute(String) pour n'importe quelle instruction
SQL
Renvoie une valeur boolean
Utiliser l'interface Statement
Utilisez la mthode executeQuery(String sql) pour les instructions SELECT.
Elle renvoie un objet ResultSet pour le traitement des lignes.
Utilisez la mthode executeUpdate(String sql) pour les instructions LMD ou LDD.
Elle renvoie une valeur int indiquant le nombre de lignes affectes par l'instruction
LMD ou la valeur 0 dans le cas d'instructions LDD.
Utilisez la mthode execute(String) pour n'importe quelle instruction SQL.
Elle renvoie la valeur boolenne true si l'instruction renvoie un objet ResultSet
(comme une interrogation). Dans le cas contraire, la valeur false est renvoye.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-18
Copyright 2008, Oracle. Tous droits rservs.
Etape 4a : Coder l'instruction d'interrogation
Indiquez une chane d'interrogation SQL, sans point-virgule,
comme argument de la mthode executeQuery().
Renvoie un objet ResultSet :
Statement stmt = null;
ResultSet rset = null;
stmt = conn.createStatement();
rset = stmt.executeQuery
("SELECT ename FROM emp");
Excuter une interrogation
Pour interroger la base de donnes, utilisez la mthode executeQuery() de votre objet
Statement. Cette mthode accepte une instruction SQL en entre et renvoie un objet JDBC
ResultSet.
L'instruction suit la syntaxe SQL standard.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-19
Copyright 2008, Oracle. Tous droits rservs.
Objet ResultSet
Le pilote JDBC renvoie les rsultats d'une interrogation
dans un objet ResultSet.
L'objet ResultSet :
gre un curseur pointant vers la ligne de donnes en cours
fournit des mthodes permettant d'extraire les valeurs des
colonnes
Objet ResultSet
Un objet ResultSet est une table de donnes reprsentant un ensemble de rsultats, gnr
via l'excution d'une instruction qui interroge la base.
Il gre un curseur pointant vers la ligne de donnes en cours. Le curseur est initialement
positionn avant la premire ligne.
Un objet ResultSet par dfaut ne peut pas tre mis jour et son curseur se dplace
uniquement vers l'avant. Il n'est donc possible de procder qu'une seule fois une itration sur
cet objet, et uniquement de la premire ligne jusqu' la dernire ligne.
L'API JDBC 2.0 permet dsormais de gnrer des objets ResultSet qui peuvent tre mis
jour et dans lesquels il est possible de naviguer.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-20
Copyright 2008, Oracle. Tous droits rservs.
Etape 4b : Excuter des instructions LMD
1. Crez un objet Statement vide.
2. Utilisez executeUpdate pour excuter l'instruction.
Exemple :
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(SQLDMLstatement);
Statement stmt = conn.createStatement();
int rowcount = stmt.executeUpdate
("DELETE FROM order_items
WHERE order_id = 2354");
Excuter des instructions LMD
La diapositive ci-dessus prsente la syntaxe des mthodes qui excutent une mise jour de la
base de donnes l'aide d'une instruction LMD. Tandis que executeQuery renvoie un
objet ResultSet contenant les rsultats de l'interrogation envoye au SGBD,
executeUpdate renvoie une valeur de type int indiquant le nombre de lignes qui ont t
mises jour dans une table.
Lorsque la mthode executeUpdate est utilise pour excuter une instruction LDD, par
exemple pour la cration d'une table, elle renvoie la valeur 0.
Lorsque la valeur renvoye par executeUpdate est 0, cela peut signifier soit que
l'instruction excute tait une instruction de mise jour n'ayant affect aucune ligne, soit que
l'instruction excute tait une instruction LDD.
Exemple : A l'aide de la mthode executeUpdate(), la table PICTURES est alimente
avec la valeur region_id de la table regions :
System.out.println("Table Insert");
stmt.executeUpdate ("INSERT INTO pictures (id)
SELECT region_id FROM regions");
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-21
Copyright 2008, Oracle. Tous droits rservs.
1. Crez un objet Statement vide.
2. Utilisez executeUpdate pour excuter l'instruction.
Exemple :
Statement stmt = conn.createStatement();
int rowcount = stmt.executeUpdate
("CREATE TABLE temp (col1 NUMBER(5,2),
col2 VARCHAR2(30)");
Etape 4b : Excuter des instructions LDD
Statement stmt = conn.createStatement();
int count = stmt.executeUpdate(SQLDDLstatement);
Excuter des instructions LDD
La diapositive ci-dessus prsente la syntaxe des mthodes qui excutent une instruction LDD.
executeUpdate() renvoie une valeur int contenant 0 pour une instruction sans valeur
renvoye, par exemple une instruction SQL LDD.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-22
Copyright 2008, Oracle. Tous droits rservs.
Etape 5 : Traiter les rsultats de l'interrogation
La mthode executeQuery() renvoie un ensemble de rsultats.
Utilisez la mthode next() en boucle pour itrer sur
les lignes.
Utilisez les mthodes getXXX() pour obtenir les valeurs
des colonnes par nom de colonne ou par position de colonne
dans l'interrogation.
stmt = conn.createStatement();
rset = stmt.executeQuery(
"SELECT ename FROM emp");
while (rset.next()) {
System.out.println
(rset.getString("ename"));
}
Traiter les rsultats de l'interrogation : Mthodes getXXX()
La classe ResultSet comporte plusieurs mthodes qui extraient les valeurs des colonnes
pour la ligne en cours. Chacune de ces mthodes getXXX() tente de convertir la valeur de la
colonne dans le type Java indiqu et renvoie une valeur Java approprie. Par exemple,
getInt() obtient la valeur de la colonne sous forme d'entier, getString() obtient la
valeur de la colonne sous forme de chane et getDate() renvoie la valeur de la colonne
sous forme de date.
La mthode next() renvoie true si une ligne a t trouve. Sinon, elle renvoie
false. Utilisez cette mthode pour dterminer si une ligne existe et pour parcourir les
lignes suivantes.
De nombreuses mthodes getXXX() permettent d'obtenir les valeurs des colonnes, XXX
tant un type de donnes Java. Par exemple, getString(pos) renvoie la colonne la
position pos en tant que type String, getInt(pos) renvoie la colonne la position
pos en tant que type int, et ainsi de suite.
Il existe un problme potentiel concernant les valeurs NULL dans la base de donnes
lorsque des mthodes getXXX (par exemple getInt) sont utilises. En effet, les
primitives Java ne prennent pas en charge les valeurs NULL. Vous avez gnralement
intrt utiliser java.sql.ResultSet.wasNull() pour dterminer si la valeur de
base de donnes est NULL
La mthode getXXX(x) est surcharge. x peut tre une valeur int (position dans
l'instruction Select) ou une valeur String (nom de colonne ou expression renvoye).
S'il s'agit d'une valeur String, la casse n'a pas d'importance.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-23
Copyright 2008, Oracle. Tous droits rservs.
ResultSet rset = stmt.executeQuery
("SELECT empno, hiredate, job
FROM emp");
while (rset.next()){
int id = rset.getInt(1);
Date hiredate = rset.getDate(2);
String job = rset.getString(3);
Mettre en correspondance des types de la base
de donnes avec des types Java
ResultSet met en correspondance les types de donnes
de la base avec les types Java :
empno
hiredate
job
NUMBER
DATE
VARCHAR2
getInt()
getDate()
getString()
Nom de la colonne Type Mthode
Mettre en correspondance des types de la base de donnes avec des types Java
Dans de nombreux cas, vous pouvez obtenir toutes les colonnes de l'ensemble de rsultats
l'aide des mthodes getObject() ou getString() de ResultSet. Pour des questions
de performances, ou parce que vous souhaitez effectuer des calculs complexes, il est parfois
important que le type des donnes corresponde exactement celui de la colonne de base de
donnes.
La section JDBC du tutoriel Java contient une matrice qui met en correspondance les
mthodes ResultSet.getXXX avec les types SQL ANSI. Pour chaque type SQL, la
matrice indique :
les mthodes getXXX qui peuvent tre utilises pour extraire le type SQL,
la mthode recommande.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-24
Mettre en correspondance les types de donnes de la base avec les types Java (suite)
Tableau des types SQL ANSI et des types Java
Le tableau suivant rpertorie les types SQL ANSI, le type de donnes Java correspondant, ainsi que
le nom de la mthode appeler dans ResultSet pour obtenir ce type de valeur de colonne :
Tableau des types SQL Oracle
Type SQL ANSI Type Java Mthode de ResultSet
CHAR, VARCHAR java.lang.String getString()
LONGVARCHAR java.io.InputStream getAsciiStream()
NUMERIC, DECIMAL java.math.BigDecimal getBigDecimal()
BIT boolean getBoolean()
TINYINT byte getByte()
SMALLINT short getShort()
INTEGER int getInt()
BIGINT long getLong()
REAL float getFloat()
DOUBLE, FLOAT double getDouble()
BINARY, VARBINARY byte[] getBytes()
LONGBINARY java.io.InputStream getBinaryStream()
DATE java.sql.Date getDate()
TIME java.sql.Time getTime()
TIMESTAMP java.sql.Timestamp getTimestamp()
Type SQL ORACLE Type Oracle Extension du type
NUMBER Oracle.Types.NUMBER oracle.sql.NUMBER
CHAR Oracle.Types.CHAR oracle.sql.CHAR
RAW Oracle.Types.RAW oracle.sql.RAW
DATE Oracle.Types.DATE oracle.sql.DATE
ROWID Oracle.Types.ROWID oracle.sql.ROWID
BLOB Oracle.Types.BLOB oracle.sql.BLOB
CLOB Oracle.Types.CLOB oracle.sql.CLOB
BFILE sans objet oracle.sql.BFILE
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-25
Copyright 2008, Oracle. Tous droits rservs.
Etape 6 : Nettoyer les ressources
Fermez explicitement les objets Connection, Statement et
ResultSet pour librer les ressources dont vous n'avez plus
besoin.
Appelez leurs mthodes close() respectives :
Connection conn = ...;
Statement stmt = ...;
ResultSet rset = stmt.executeQuery(
"SELECT ename FROM emp");
...
// clean up
rset.close();
stmt.close();
conn.close();
...
Fermer les objets ResultSet, Statement et Connection
Vous devez fermer explicitement tous les objets ResultSet et Statement une fois que
vous avez termin de les utiliser. Les mthodes close() nettoient la mmoire et librent les
curseurs de base de donnes. Si vous ne fermez pas explicitement les objets ResultSet et
Statement, d'importantes pertes de ressources mmoire peuvent se produire et la base de
donnes peut manquer de curseurs. Vous devez alors fermer la connexion.
Le pilote ct serveur s'excute dans une session par dfaut. Vous tes dj connect et vous
ne pouvez pas fermer la connexion par dfaut tablie par le pilote. L'appel de la mthode
close() sur la connexion n'a aucun effet.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-26
Copyright 2008, Oracle. Tous droits rservs.
Exemple d'interrogation de base
import java.sql.*;
import oracle.jdbc.driver.OracleDriver;
class TestJdbc {
public static void main (String args [ ]) throws
SQLException {
DriverManager.registerDriver (new
oracle.jdbc.OracleDriver());
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@myHost:1521:ORCL","scott",
"tiger");
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery
("SELECT ename FROM emp");
while (rset.next())
System.out.println (rset.getString ("ename"));
rset.close();
stmt.close();
conn.close();
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-27
Copyright 2008, Oracle. Tous droits rservs.
1. Crez un objet Statement vide.
2. Utilisez execute pour excuter l'instruction.
3. Traitez l'instruction en consquence.
boolean isQuery = stmt.execute(SQLstatement);
if (isQuery) { // was a query - process results
ResultSet r = stmt.getResultSet(); ...
}
else { // was an update or DDL - process result
int count = stmt.getUpdateCount(); ...
}
Grer une instruction SQL inconnue
Statement stmt = conn.createStatement();
Grer une instruction SQL inconnue
Une application ne peut pas savoir si une instruction donne renverra un ensemble de rsultats
tant que cette instruction n'a pas t excute. En outre, certaines procdures stockes peuvent
renvoyer des ensembles de rsultats et des nombres de mises jour diffrents.
JDBC fournit un mcanisme permettant une application d'excuter une instruction, puis de
traiter une voire plusieurs collections de rsultats et de nombres de mises jour. Ce
mcanisme est bas sur l'utilisation d'une mthode execute() gnrale, puis sur des appels
de trois autres mthodes : getResultSet, getUpdateCount et getMoreResults.
Ces mthodes permettent une application d'explorer un par un les rsultats de l'instruction,
puis de dterminer si un rsultat donn est un ensemble de rsultats ou un nombre de mises
jour.
execute() renvoie true si le rsultat de l'instruction est un ensemble de rsultats, false
si le rsultat de l'instruction est un nombre de mises jour. Vous pouvez alors appeler
getResultSet() ou getUpdateCount() sur l'instruction.
L'exemple qui suit utilise execute() pour excuter de manire dynamique une instruction
inconnue :
public void executeStmt (String statement) throws SQLException {
Statement stmt = conn.createStatement(); // Excuter l'instruction
boolean isQuery = stmt.execute(statement);
if (isQuery ) { <statement est une interrogation ; traiter les rsultats>
... }
else { <statement est une mise jour ou une instruction LDD>
int updateCount = stmt.getUpdateCount(); // Traiter les rsultats
... }
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-28
Copyright 2008, Oracle. Tous droits rservs.
Les instructions SQL peuvent gnrer une exception
java.sql.SQLException.
Utilisez les mthodes Java standard de gestion des
erreurs.
Traiter les exceptions
try {
rset = stmt.executeQuery("SELECT empno,
ename FROM emp");
}
catch (java.sql.SQLException e)
{ ... /* handle SQL errors */ }
...
finally { // clean up
try { if (rset != null) rset.close(); }
catch (Exception e)
{ ... /* handle closing errors */ }
...
Traiter les exceptions
Vous pouvez utiliser la structure de bloc try-catch-finally pour fermer les ressources.
Exemple de code
Connection conn = null; Statement stmt = null;
ResultSet rset = null; // initialize
stmt = conn.createStatement();
try {
rset = stmt.executeQuery("SELECT empno, ename FROM emp");
}
catch (java.sql.SQLException e)
{ ... /* handle errors */ }
...
// Clean up resources
finally {
try { if (rset != null) rset.close(); } catch (Exception e)
{}
try { if (stmt != null) stmt.close(); } catch (Exception e)
{}
try { if (conn != null) conn.close(); } catch (Exception e)
{}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-29
Copyright 2008, Oracle. Tous droits rservs.
Transactions avec JDBC
Par dfaut, les connexions sont tablies en mode
autocommit.
Utilisez conn.setAutoCommit(false) pour dsactiver
le mode autocommit.
Pour contrler les transactions lorsque le mode
autocommit est dsactiv, utilisez :
conn.commit() pour valider une transaction
conn.rollback() pour annuler une transaction
La fermeture d'une connexion valide la transaction, mme
si l'option autocommit est dsactive.
Transactions avec JDBC
Une fois que vous avez effectu une opration UPDATE ou INSERT dans un ensemble de
rsultats, vous propagez les modifications dans la base de donnes via une opration distincte,
que vous pouvez ignorer si vous souhaitez annuler les modifications.
Avec JDBC, les transactions de base de donnes sont gres par l'objet Connection.
Lorsqu'un objet Connection est cr, il fonctionne en mode autocommit, ce qui signifie
que chaque instruction est valide aprs son excution.
Vous pouvez changer le mode autocommit de la connexion tout moment en appelant
setAutoCommit(). Voici une description complte du mode autocommit :
Si une connexion est en mode autocommit, toutes ses instructions SQL sont excutes et
valides en tant que transactions individuelles.
Si une instruction renvoie un ensemble de rsultats, l'instruction se termine lorsque la
dernire ligne de l'ensemble de rsultats a t extraite ou lorsque l'ensemble de rsultats a
t ferm.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-30
Transactions avec JDBC (suite)
Si le mode autocommit a t dsactiv, ses instructions SQL sont regroupes en transactions,
lesquelles doivent tre termines via l'appel de commit() ou rollback(). La mthode
commit() rend permanentes toutes les modifications effectues depuis la validation (commit)
ou l'annulation (rollback) prcdente et libre les ventuels verrous de base de donnes dtenus
par la connexion.
La mthode rollback() supprime toutes les modifications effectues depuis la validation ou
l'annulation prcdente et libre les ventuels verrous de base de donnes. Les mthodes
commit() et rollback() ne doivent tre appeles que lorsque le mode autocommit est
dsactiv.
Remarque : Le pilote ct serveur ne prend pas en charge le mode autocommit. Vous devez
contrler les transactions de manire explicite.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-31
Copyright 2008, Oracle. Tous droits rservs.
Objet PreparedStatement
L'objet PreparedStatement empche la ranalyse
des instructions SQL.
Utilisez cet objet pour les instructions que vous
souhaitez excuter plusieurs fois.
L'objet PreparedStatement peut contenir des
variables que vous fournissez chaque fois que vous
excutez l'instruction.
Objet PreparedStatement
PreparedStatement est hrit de Statement. La diffrence est que l'objet
PreparedStatement contient des instructions SQL prcompiles.
Si vous excutez plusieurs fois un objet Statement, son instruction SQL est compile
chaque fois. PreparedStatement est plus efficace, car son instruction SQL est compile
une seule fois, lorsque vous prparez initialement l'objet. Ensuite, l'instruction SQL n'a pas
besoin d'tre recompile chaque fois que vous l'excutez dans PreparedStatement.
Par consquent, si vous devez excuter plusieurs fois la mme instruction SQL dans une
application, il est plus efficace d'utiliser PreparedStatement que Statement.
Paramtres de PreparedStatement
PreparedStatement ne doit pas ncessairement excuter exactement la mme
interrogation chaque fois. Vous pouvez indiquer des paramtres dans la chane SQL de
l'objet et indiquer les valeurs de ces paramtres lors de l'excution de l'instruction.
La diapositive qui suit explique comment fournir les paramtres et excuter un objet
PreparedStatement.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-32
Copyright 2008, Oracle. Tous droits rservs.
PreparedStatement pstmt =
conn.prepareStatement
("UPDATE emp SET ename = ? WHERE empno = ?");
PreparedStatement pstmt =
conn.prepareStatement
("SELECT ename FROM emp WHERE empno = ?");
Crer un objet PreparedStatement
1. Enregistrez le pilote et crez la connexion de base de
donnes.
2. Crez l'objet PreparedStatement, en identifiant les
variables avec un point d'interrogation (?).
Crer un objet PreparedStatement
Pour crire les modifications dans la base de donnes, par exemple pour les oprations
INSERT ou UPDATE, vous crez gnralement un objet PreparedStatement. Vous
pouvez utiliser cet objet pour excuter une instruction avec divers jeux de paramtres d'entre.
La mthode prepareStatement() de votre objet JDBC Connection vous permet de
dfinir une instruction qui accepte des paramtres de type variable attache (bind variable) et
renvoie un objet JDBC PreparedStatement avec la dfinition de l'instruction.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-33
Copyright 2008, Oracle. Tous droits rservs.
1. Indiquez les valeurs des variables.
2. Excutez l'instruction.
pstmt.setXXX(index, value);
pstmt.executeQuery();
pstmt.executeUpdate();
int empNo = 3521;
PreparedStatement pstmt =
conn.prepareStatement("UPDATE emp
SET ename = ? WHERE empno = ? ");
pstmt.setString(1, "DURAND");
pstmt.setInt(2, empNo);
pstmt.executeUpdate();
Excuter un objet PreparedStatement
Dfinir des valeurs pour les variables attaches (bind variables)
Utilisez les mthodes PreparedStatement.setXXX() pour fournir les valeurs des
variables indiques dans un objet PreparedStatement. Il existe une mthode
setXXX() pour chaque type Java : setString(), setInt(), etc.
Vous devez utiliser la mthode setXXX() compatible avec le type SQL de la variable. Dans
l'exemple de la diapositive ci-dessus, la premire variable met jour une colonne VARCHAR,
de sorte que vous devez utiliser setString() pour fournir la valeur de la variable. Vous
pouvez utiliser setObject() avec n'importe quel type de variable.
Chaque variable comporte un index. L'index de la premire variable de l'objet
PreparedStatement est 1, l'index de la deuxime variable est 2, etc. S'il n'y a qu'une
seule variable, son index est 1. L'index d'une variable est transmis la mthode setXXX().
Fermer un objet PreparedStatement
L'objet PreparedStatement n'est pas mis en mmoire cache. Si vous le fermez, vous
devez recommencer.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-34
Copyright 2008, Oracle. Tous droits rservs.
Objet DataSource
Caractristiques d'un objet DataSource :
C'est la reprsentation d'une source de donnes
(systme de stockage de donnes physique) dans le
langage de programmation Java.
Il peut rsider sur un serveur distant ou un ordinateur
de bureau local.
Il est en quelque sorte la fabrique des connexions la
source de donnes concrte reprsente par une de
ses instances.
Il peut ventuellement tre li des entits JNDI
(Java Naming and Directory), ce qui permet d'accder
aux bases de donnes via des noms logiques pour
plus de commodit et de portabilit.
Objet DataSource
Les objets Java DataSource reprsentent des systmes de stockage de donnes physiques
tels que des bases de donnes relationnelles. C'est au travers d'objets
javax.sql.DataSource qu'une application peut extraire les connexions sous-jacentes
aux bases de donnes reprsentes par l'objet DataSource.
L'interface DataSource fournit une alternative la classe DriverManager pour tablir
une connexion avec une source de donnes. (Un exemple d'utilisation de la classe
DriverManager vous a t fourni dans la section "Etape 2" de ce chapitre.) Le mcanisme
DataSource est dsormais privilgi par rapport la fonctionnalit DriverManager car
il offre davantage de souplesse et une approche plus normalise. Vous pouvez utiliser les deux
approches dans la mme application, mais il est recommand d'adopter progressivement
l'interface DataSource. Sun Microsystems va probablement finir par abandonner
DriverManager, ainsi que les classes et fonctionnalits associes.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-35
Copyright 2008, Oracle. Tous droits rservs.
Avantages des objets DataSource
L'utilisation d'un objet DataSource pour tablir une
connexion la base de donnes prsente plusieurs
avantages :
Il n'est pas ncessaire pour les applications de coder
en dur une classe de pilote.
Il est possible de modifier les proprits d'une source
de donnes sans toucher au code de l'application.
La concentration des connexions et les transactions
distribues sont disponibles via un objet DataSource
implment pour fonctionner avec l'infrastructure du
niveau intermdiaire (middle-tier).
Avantages des objets DataSource
L'utilisation de DriverManager pour la connexion une source de donnes rduit la
portabilit, puisque l'application doit identifier une classe de pilote JDBC spcifique et l'URL
associe (voir plus haut dans ce chapitre). Le nom de classe et l'URL du pilote sont propres
un fournisseur, une implmentation de pilote et une source de donnes JDBC. Par consquent,
si un dtail relatif la source de donnes ou au pilote change, il convient de modifier le code
de l'application en consquence. Si vous avez besoin d'applications portables d'une source de
donnes une autre, l'interface DataSource offre des avantages intressants. Un objet
DataSource fonctionne avec un service de noms JNDI (Java Naming and Directory
Interface). Il est cr, dploy et gr en dehors des applications qui l'utilisent. Le fait d'tre
enregistr dans un service de noms JNDI octroie l'objet DataSource deux avantages
importants par rapport DriverManager. D'une part, le programmeur n'a pas coder en
dur les informations relatives au pilote (comme c'est le cas avec DriverManager). Il peut
choisir un nom logique pour la source de donnes et l'enregistrer dans un service de noms
JNDI. L'application utilise ce nom logique et le service de noms JNDI fournit l'objet
DataSource correspondant. L'objet DataSource peut ensuite tre utilis pour crer une
connexion la source de donnes qu'il reprsente.
D'autre part, la fonctionnalit DataSource permet aux dveloppeurs d'implmenter une
classe DataSource afin de tirer parti de fonctionnalits telles que la concentration des
connexions et les transactions distribues. La concentration des connexions permet
d'amliorer considrablement les performances du code en rutilisant les connexions
existantes au lieu de crer une connexion pour rpondre chaque demande. Les transactions
distribues permettent de prendre en charge les nombreuses oprations de base de donnes des
grandes entreprises.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-36
Copyright 2008, Oracle. Tous droits rservs.
Utiliser un objet OracleDataSource pour la
connexion une base de donnes
Trois tapes sont ncessaires pour utiliser un objet
OracleDataSource :
1. Crer un objet OracleDataSource de la classe
oracle.jdbc.pool.OracleDataSource
2. Dfinir les attributs de l'objet OracleDataSource
l'aide des mthodes set dfinies dans la classe
3. Etablir la connexion la base de donnes via l'objet
OracleDataSource l'aide de la mthode
getConnection()
Utiliser un objet OracleDataSource pour la connexion une base de donnes
Les fournisseurs de pilotes proposent des implmentations de DataSource. Un objet
DataSource reprsente une source de donnes physique particulire, et chaque connexion
cet objet cre une connexion la source en question. Oracle fournit une implmentation
OracleDataSource.
Procdure de connexion une base de donnes l'aide d'un objet
OracleDataSource :
1. Crez un objet de la classe oracle.jdbc.pool.OracleDataSource :
OracleDataSource myDataSource = new OracleDataSource();
2. Avant d'utiliser l'objet OracleDataSource, vous devez prciser les dtails de la
connexion en dfinissant un certain nombre d'attributs l'aide des diffrentes mthodes
set de la classe. Ces dtails comprennent notamment le nom de la base de donnes et le
pilote JDBC utiliser. La classe oracle.jdbc.pool.OracleDataSource
implmente l'interface javax.sql.DataSource qui dfinit un ensemble d'attributs.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-37
Utiliser un objet OracleDataSource pour la connexion une base de donnes (suite)
myDataSource.setServerName("localhost");
myDataSource.setDatabaseName("ORCL");
myDataSource.setDriverType("thin");
myDataSource.setNetworkProtocol("tcp");
myDataSource.setPortNumber(1521);
myDataSource.setUser("scott");
myDataSource.setPassword("tiger");
Les lignes suivantes illustrent l'utilisation de quelques mthodes get permettant de lire les attributs
dfinis prcdemment :
String serverName = myDataSource.getServerName();
String databaseName = myDataSource.getDatabaseName();
String driverType = myDataSource.getDriverType();
3. La troisime tape consiste tablir la connexion la base de donnes l'aide de l'objet
OracleDataSource. Pour cela, vous appelez la mthode getConnection() :
Connection myConnection = myDataSource.getConnection();
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-38
Copyright 2008, Oracle. Tous droits rservs.
Optimisation des accs la base de donnes via
la concentration des connexions
Utilisez la concentration des connexions pour limiter
les cots lis la cration et la fermeture de
sessions.
Utilisez la dclaration explicite de la source de
donnes pour la rfrence physique la base.
Utilisez la mthode getConnection() pour obtenir
une instance de connexion logique.
Optimisation des accs la base de donnes via la concentration des
connexions
Un pool de connexions est un cache de connexions de base de donnes. Il est gr en
mmoire, ce qui permet la rutilisation des connexions. Cette technique est importante pour
amliorer les performances, en particulier lorsque l'API JDBC est utilise dans un
environnement de niveau intermdiaire (middle-tier).
La concentration des connexions n'affecte pas le code de l'application. Cette dernire accde
simplement une source de donnes JDBC et l'utilise de manire standard. La source de
donnes implmente la concentration des connexions de manire transparente pour
l'application, via les fonctions PooledConnection et ConnectionPoolDataSource
offertes par le pilote JDBC 2.0.
javax.sql.ConnectionPoolDataSource est une implmentation de
DataSource qui fournit des fonctionnalits de concentration des connexions. Elle
utilise une classe qui implmente l'interface ConnectionPoolDataSource.
ConnectionPoolDataSource est une fabrique d'objets PooledConnection.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-39
Optimisation des accs la base de donnes via la concentration des connexions
(suite)
javax.sql.PooledConnection : Les objets regroups dans un pool par une classe
DataSource assortie de fonctionnalits de concentration des connexions implmentent
l'interface PooledConnection. Lorsque l'application demande une connexion l'objet
DataSource, celui-ci repre un objet PooledConnection disponible ou (si le pool est
vide) obtient un nouvel objet de son interface ConnectionPoolDataSource. La classe
PooledConnection fournit une mthode getConnection() qui renvoie un objet
Connection. L'objet DataSource appelle cette mthode et renvoie l'objet Connection
l'application. Cet objet Connection se comporte comme une connexion normale, cette
diffrence prs : lorsque l'application appelle la mthode close(), il informe la classe
PooledConnection laquelle il appartient qu'il n'est plus utilis (au lieu de fermer la
connexion la base de donnes). La classe PooledConnection transmet l'information la
classe DataSource qui renvoie l'objet PooledConnection dans le pool.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-40
Copyright 2008, Oracle. Tous droits rservs.
Base de
donnes
Commandes
de base de
donnes
Source de donnes
ConnectionPoolDataSource
Servlet Java
Code serveur du niveau
intermdiaire
Niveau intermdiaire
Concentration des connexions
Pilote JDBC
Concentration des connexions
Si vous utilisez la concentration des connexions, vous devez faire appel un objet
DataSource (plutt qu' la classe DriverManager) pour obtenir une connexion. Cet
objet est implment et dploy de faon crer des connexions regroupes dans un pool.
Remarque : La concentration des connexions est prise en charge par les pilotes JDBC thin et
OCI des versions JDK 1.1 et JDK 1.2. Elle n'est pas prise en charge pour le pilote serveur, car
ce dernier ne peut comporter qu'une seule connexion, qui est tablie avec la session connecte
dans laquelle il s'excute.
Exemple simple d'utilisation d'une connexion appartenant un pool
import java.sql.*;
import javax.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.*;
class PooledConnection1
{
public static void main (String args [])
throws SQLException {
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-41
Concentration des connexions (suite)
Exemple simple d'utilisation d'une connexion appartenant un pool (suite)
// Create an OracleConnectionPoolDataSource instance
OracleConnectionPoolDataSource ocpds =
new
OracleConnectionPoolDataSource();
String url = "jdbc:oracle:thin:@myhost";
try {
String url1 = System.getProperty("JDBC_URL");
if (url1 != null)
url = url1;
} catch (Exception e) {
// If there is any security exception,
// ignore it and use the default
}
// Set connection parameters
ocpds.setURL(url);
ocpds.setUser("scott");
ocpds.setPassword("tiger");
// Create a pooled connection
PooledConnection pc = ocpds.getPooledConnection();
// Get a logical connection
Connection conn = pc.getConnection();
// Create a Statement
Statement stmt = conn.createStatement ();
// Select the ENAME column from the EMP table
ResultSet rset = stmt.executeQuery ("select ENAME from
EMP");
// Iterate through the result set and print the employee names
while (rset.next())
System.out.println (rset.getString (1));
// Close the ResultSet
rset.close();
rset = null;
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 15-42
Concentration des connexions (suite)
Exemple simple d'utilisation d'une connexion appartenant un pool (suite)
// Close the Statement and logical connection
stmt.close();
stmt = null;
conn.close();
conn = null;
// Get another logical connection using the same pooled
connection
conn = pc.getConnection();
// Create another statement and run another query against the
database
}
Processus de gestion des vnements : Enregistrement
Enregistrer le processus d'coute
Comme nous l'avons vu, l'tape finale du processus de codage de la gestion des vnements
est l'enregistrement du processus d'coute auprs de la source de l'vnement. Le processus
d'coute d'vnement s'enregistre pour un type d'vnement particulier. Par exemple, "je suis
intress par les clics sur les boutons".
Enregistrer les objets processus d'coute
Un processus d'coute d'vnement ne reoit les vnements d'une source que s'il est
enregistr auprs de cette source en tant que processus d'coute pour un type d'vnement
spcifique. Pour chaque type d'vnement qu'il peut gnrer, un objet source fournit une
mthode qui permet aux objets de s'enregistrer en tant que processus d'coute de l'vnement.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-19
Processus de gestion des vnements : Enregistrement (suite)
Prenons l'exemple d'un bouton. Etant donn qu'un objet Button peut gnrer des
ActionEvent, la classe Button fournit une mthode appele addActionListener().
L'exemple prsent dans la diapositive montre comment appeler cette mthode afin d'enregistrer
l'objet processus d'coute cr dans la diapositive prcdente. Cet objet MyListener est ajout
une liste de processus d'coute qui sont informs lorsqu'un utilisateur clique sur le bouton. Cet
objet processus d'coute contient le code permettant de grer l'vnement.
Remarque : Il existe une mthode, appele removeActionListener(), qui permet de
retirer un processus d'coute de la liste des processus d'coute enregistrs, comme dans l'exemple
suivant :
findBtn.removeActionListener( actionListenerObj);
Le modle de gestion des vnements est appliqu, car les classes suivent les rgles de codage
ci-aprs :
La classe de l'objet gnr par l'vnement est nomme XXXEvent.
Le processus d'coute implmente une interface appele XXXListener.
La source de l'vnement fournit une mthode addXXXListener() qui accepte un
argument objet, lequel implmente l'interface XXXListener approprie.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-20
Copyright 2008, Oracle. Tous droits rservs.
Processus de gestion des vnements :
L'vnement se produit
Inform
public void jbInit() {
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Your code to handle the ActionEvent
}
}); }
OK
Source
Objet processus d'coute
d'vnement
Mthode du gestionnaire
Signaler l'vnement au processus d'coute
Lorsque l'vnement qui intresse le processus d'coute se produit, celui-ci en est inform.
Une source d'vnement avertit un objet processus d'coute d'vnement en appelant une
mthode et en lui transmettant un objet gnr par l'vnement. Les vnements ne sont
envoys qu'aux objets processus d'coute enregistrs. Un objet ne reoit jamais d'vnement
non sollicit. Les vnements non grs sont purement et simplement ignors.
Ecouter un vnement
Lorsqu'un vnement se produit, sa source avertit le processus d'coute d'vnement en
appelant une mthode spcifique. Tous les processus d'coute d'un type d'vnement
particulier doivent fournir la mthode approprie. Par exemple, l'vnement qui se produit
lorsque l'utilisateur clique sur un bouton est ActionEvent. Tous les processus d'coute d'un
ActionEvent doivent fournir une mthode actionPerformed(), car c'est elle que la
source de l'vnement va tenter d'appeler.
Implmenter un processus d'coute d'vnement en tant que classe interne
L'exemple prsent par la diapositive ci-dessus illustre l'implmentation d'un objet processus
d'coute d'vnement et son enregistrement auprs de la source d'vnement en une seule
tape. Pour cela, il suffit d'implmenter l'objet processus d'coute d'vnement en tant que
classe interne anonyme.
Par dfaut, le type spcifique d'adaptateur d'vnement de classe interne que gnre
JDeveloper est appel adaptateur anonyme. L'implmentation de ce type d'adaptateur vite la
cration d'une classe d'adaptateur (nomme) distincte. Le code qui en rsulte est aussi
compact qu'esthtique.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-21
Copyright 2008, Oracle. Tous droits rservs.
Processus de gestion des vnements :
Excuter le gestionnaire d'vnements
Source
OK
Source
Objet processus d'coute
d'vnement
Mthode du gestionnaire :
enregistrer les modifications
et quitter
Excuter le gestionnaire d'vnements
Le processus d'coute d'vnement comprend un gestionnaire d'vnements. Il excute
celui-ci lorsqu'il reoit une notification d'vnement. Par exemple, si le bouton est un bouton
d'enregistrement (Save), le gestionnaire d'vnements enregistre les donnes du panneau.
Comment cela fonctionne-t-il ?
Tous les processus d'coute d'un ActionEvent doivent implmenter l'interface
ActionListener.
Les diffrentes interfaces d'coute dsignent les mthodes implmenter au sein de la classe
de processus d'coute. L'interface ActionListener indique une seule mthode
implmenter :
public interface ActionListener {
public void actionPerformed(ActionEvent e);
}
Notez que les gestionnaires d'vnement ne doivent pas contenir de code relevant de la
logique mtier. Ils servent au contraire appeler la logique mtier d'autres classes
(composants EJB, JavaBean, etc.).
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-22
Copyright 2008, Oracle. Tous droits rservs.
interface MouseListener {
// Declares five methods
}
class MouseAdapter implements MouseListener {
// Empty implementations of all five methods
}
public class MyListener extends MouseAdapter {
// Override only the methods you need
}
Utiliser des classes d'adaptateur pour
les processus d'coute
Il s'agit de classes de "convenance" qui implmentent des
interfaces de processus d'coute d'vnement :
Elles fournissent des implmentations de mthode vides.
Elles sont tendues et la mthode souhaite est redfinie.
Classes d'adaptateur
Certaines des interfaces de processus d'coute d'vnement contiennent plusieurs mthodes.
Pour chaque interface, il existe une classe d'adaptateur simple qui fournit un corps vide pour
chaque mthode.
Par exemple, MouseListener contient cinq mthodes. Si vous implmentez directement
MouseListener, vous devez implmenter les cinq mthodes, mme si une seule vous
intresse. Vous pouvez galement tendre la classe MouseAdapter.
Dans ce cas, il est possible de remplacer les mthodes dont vous avez besoin et d'ignorer le
reste.
Il n'existe aucune classe d'adaptateur pour l'interface ActionListener, car celle-ci ne
possde qu'une mthode.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-23
Copyright 2008, Oracle. Tous droits rservs.
Architecture MVC de Swing
Le principe MVC (Model-View-Controller)
Signification des termes :
Le modle (Model) reprsente les donnes ou informations.
La vue (View) constitue une reprsentation graphique des
donnes.
Le contrleur (Controller) gre les vnements qui modifient
la vue ou le modle.
Procdez toujours la mise jour des composants Swing
dans la file d'attente Event Thread, ou utilisez les mthodes
SwingUtilities.
Vue
Vue
modification
modification
Notification
de mise jour
Obtention des donnes
modifies
Evnement
Contrleur
Modle
Importance de l'architecture MVC de Swing
L'architecture MVC (Model-View-Controller) constitue des associations dynamiques entre les
reprsentations de l'objet de donnes, des donnes et des vnements. Elle permet la cration
de plusieurs vues des mmes donnes (modle), les diffrentes vues tant synchronises lors
de la modification des donnes. Cette architecture est la base de la cration de composants
fonds sur les donnes.
La diapositive ci-dessus illustre le fait que, lorsqu'un vnement se produit et entrane la
modification d'un composant graphique, la vue demande au modle les donnes appropries.
Si l'vnement provoque un changement du modle, ce dernier informe la vue qu'un
changement a eu lieu, et celle-ci demande son tour au modle les donnes modifies.
Dans le cadre de Swing, un composant d'interface graphique reprsente une vue. Chaque
composant transmet un objet vnement un objet "processus d'coute" ou un contrleur en
vue de grer l'vnement. En fonction de l'vnement, le contrleur modifie la vue ou le
modle. Si la classe du modle est l'une de celles fournies par l'API Swing et qu'elle est
adapte au composant d'interface graphique associ, les modifications apportes au modle
sont automatiquement visibles sur la vue.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-24
Importance de l'architecture MVC de Swing (suite)
L'utilisation d'un objet JList avec un Vector est possible, mais l'ajout d'lments au Vector
n'entrane pas la mise jour du contenu de l'objet JList, et ce pour deux raisons :
Le Vector ne constitue pas la classe de modle approprie pour un objet JList.
L'objet JList cre un objet ListModel interne partir des lments du vecteur.
Cependant, si vous crez explicitement un objet DefaultListModel et l'associez un objet
JList, les lments ajouts l'objet DefaultListModel sont rpercuts dans l'objet
JList.
Remarque : Le schma de la diapositive prcdente reprsente l'architecture MVC classique.
Les composants Swing utilisent une version modifie de cette architecture afin de prendre en
charge la prsentation la carte.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-25
Importance de l'architecture MVC de Swing (suite)
Composants (vues) Swing et classes de modle
Le tableau ci-dessous indique les interfaces et les composants Swing qui peuvent tre
implments par les classes de modle pour fournir les fonctionnalits MVC. Chaque interface a
t implmente par une classe dans les packages de l'API Swing et la classe d'implmentation
est galement indique.
Par dfaut, les composants Swing crent et stockent de faon implicite les donnes dans un
modle par dfaut rpondant leurs besoins. Vous pouvez utiliser tous les composants pour crer
et utiliser explicitement un modle appropri, gnralement bas sur ceux illustrs dans le
tableau prcdent.
Composants Swing Interface de modle Classe implmentant l'interface
de modle
JTextField, JPasswordField,
JTextArea, JTextPane,
JEditorPane
Document (dans le package
javax.swing.text)
PlainDocument et
DefaultStyledDocument
JButton, JCheckBox,
JCheckBoxMenuItem, JMenu,
JMenuItem, JRadioButton,
JRadioButtonMenuItem,
JToggleButton
ButtonModel DefaultButtonModel
JComboBox ComboBoxModel DefaultComboBoxModel
JProgessBar, JScrollBar,
JSlider
BoundedRangeModel DefaultBoundedRangeModel
JList ListModel, ListSelectionModel DefaultListModel,
DefaultListSelectionModel
JTable TableModel (dans le package
javax.swing.table)
ListSelectionModel
DefaultTableModel,
DefaultListSelectionModel
JTree TreeModel, TreeSelectionModel
(les deux interfaces se trouvent
dans le package
javax.swing.table)
DefaultTreeModel,
DefaultTreeSelectionModel
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-26
Copyright 2008, Oracle. Tous droits rservs.
Mthodes lmentaires des composants
de type texte
Mthodes des lments de type texte (JLabel,
JTextField et JButton) :
void setText(String value)
String getText()
Autres mthodes de JTextArea :
void append(String value)
void insert(String value, int pos)
Les modifications apportes au contenu des composants
sont gnralement effectues dans le thread de gestion
des vnements.
Remarque : Consultez la documentation de l'API Java pour en
savoir plus sur les fonctionnalits de chaque composant.
Obtenir et dfinir les proprits
Des mthodes diffrentes sont utilises pour alimenter les divers composants Swing avec des
valeurs, ainsi que pour extraire les valeurs contenues dans les composants. En gnral, la
plupart des lments de type texte, tels que les libells, les champs de texte et les zones de
texte, comportent une mthode setText(String value) qui affecte au contenu la
valeur de type string indique, ou une mthode String getText() qui renvoie le
contenu en tant qu'objet String.
Remarque : Vous devez utiliser les mthodes setText() et getText() pour
(respectivement) modifier et obtenir le libell d'un objet JButton. N'utilisez pas les
mthodes setLabel() et getLabel(), dsormais obsoltes.
Les objets JTextArea sont des zones de texte plusieurs lignes. Ils permettent donc
d'ajouter du texte au contenu existant, d'insrer du texte une position donne ou de
remplacer du texte. Consultez la documentation de l'API Java pour en savoir plus sur ces
mthodes.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-27
Copyright 2008, Oracle. Tous droits rservs.
Mthodes lmentaires des composants JList
Voici un sous-ensemble des mthodes du composant JList :
void setListData(Vector)
Copie un Vector dans un composant ListModel appliqu
avec setModel
void setModel(ListModel)
Dfinit le modle reprsentant les donnes et efface la
slection
Utilise la classe DefaultListModel pour le modle
Object getSelectedValue()
Renvoie l'objet slectionn ou null si rien n'est slectionn
int getSelectedIndex()
Renvoie l'index de l'lment slectionn ou 1 si rien n'est
slectionn
Composants de type liste
JList et JComboBox sont des composants Swing permettant de grer des listes de donnes.
La diapositive ci-dessus dcrit quelques-unes des mthodes fournies par la classe JList.
Vector vector = new Vector();
Jlist list = new JList(vector);
Par exemple, si vous crez un objet JList avec le constructeur qui accepte un vecteur, les
lments du vecteur sont copis dans un objet DefaultListModel cr en interne. Ainsi,
si vous ajoutez des lments au vecteur avec la mthode addElement(), les nouveaux
lments ne sont pas visibles dans la liste JList tant que vous n'avez pas appel la mthode
JList.setListData() en transmettant comme argument l'objet vecteur mis jour. Ce
procd n'est pas efficace, car les lments sont de nouveau copis partir du vecteur et un
nouvel objet DefaultListModel est cr en interne.
Il est prfrable de crer d'abord l'objet DefaultListModel et de l'utiliser comme un
Vector, puis de crer l'objet JList avec le constructeur appropri, par exemple :
DefaultListModel model = new DefaultListModel();
Jlist list = new JList(model);
Vous pouvez galement appeler la mthode setModel(). A mesure que des lments sont
ajouts l'objet DefaultListModel l'aide de la mthode addElement(), ils
apparaissent automatiquement dans l'affichage graphique de l'objet JList.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-28
Copyright 2008, Oracle. Tous droits rservs.
Evnements qu'un
composant peut gnrer
Mthodes du gestionnaire
d'vnements
Quels sont les vnements qu'un composant
peut gnrer ?
Chaque type de composant gnre des vnements diffrents
Pour savoir quels vnements un composant peut gnrer avec JDeveloper, slectionnez ce
composant dans le volet de conception, puis cliquez sur l'onglet Events dans le gestionnaire
de proprits. La liste de tous les vnements que le composant peut gnrer s'affiche.
Pour chaque vnement, le gestionnaire de proprits indique galement si une mthode de
gestionnaire d'vnements a dj t installe. Dans la diapositive ci-dessus, le gestionnaire
de proprits affiche tous les vnements du composant JButton, savoir findButton.
Comme vous n'avez pas encore install de gestionnaire d'vnements, la liste du gestionnaire
de proprits ne comporte aucune mthode de gestionnaire d'vnements.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-29
Copyright 2008, Oracle. Tous droits rservs.
1. Slectionnez l'vnement grer.
2. Cliquez sur la colonne
de droite pour saisir
un nom de mthode.
3. Cliquez deux fois sur la colonne
de droite pour crer la mthode.
Dfinir un gestionnaire d'vnements dans
JDeveloper
Dfinir un gestionnaire d'vnements dans JDeveloper
JDeveloper facilite la dfinition de mthodes de gestionnaire d'vnements dans votre code :
Dans l'diteur d'interface graphique, slectionnez le composant pour lequel vous souhaitez
ajouter un gestionnaire d'vnements.
Dans le gestionnaire de proprits, l'onglet Events affiche la liste de tous les vnements
que le composant peut gnrer. Cliquez sur l'vnement grer.
Lorsque vous cliquez sur la colonne de droite de cet vnement, le gestionnaire de
proprits propose un nom pour la mthode de gestionnaire d'vnements qui va tre
gnre. Dans notre exemple, la mthode de gestionnaire d'vnements s'appelle
findButton_actionPerformed.
Cliquez sur le bouton "" afin d'obtenir une suggestion de nom pour la mthode de
gestionnaire d'vnements dans la bote de dialogue. JDeveloper gnre la mthode de
gestionnaire d'vnements dans votre code.
Notez que lorsque vous cliquez deux fois sur le bouton dans l'diteur d'interface graphique, le
processus d'coute et le gestionnaire d'vnements sont automatiquement crs. Vous pouvez
galement cliquer sur l'onglet Events du gestionnaire de proprits et cliquer deux fois sur le
nom du processus d'coute.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-30
Dfinir un gestionnaire d'vnements dans JDeveloper (suite)
Evnement actionPerformed
De nombreux composants de l'interface graphique possdent un vnement spcial appel
actionPerformed. Pour la plupart des composants, actionPerformed est l'vnement le
plus frquemment utilis. Par exemple, un objet JButton gnre un vnement
actionPerformed lorsque l'utilisateur clique sur le bouton. Un objet JList gnre un
vnement actionPerformed lorsque l'utilisateur clique deux fois sur l'objet. Utilisez
actionPerformed dans la mesure du possible, plutt qu'un vnement du type
mouseClicked.
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-31
Copyright 2008, Oracle. Tous droits rservs.
public void jbInit() throws Exception {
findButton.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
findButton_actionPerformed(e);
}
});
void findButton_actionPerformed(ActionEvent e) {
// Your code to handle the ActionEvent
}
Find
Style par dfaut du code de gestion des
vnements gnr par JDeveloper
Que se passe-t-il lorsqu'un vnement est dclench ?
Lorsque l'utilisateur clique sur un bouton, ce dernier examine sa liste d'objets processus
d'coute enregistrs et appelle la mthode actionPerformed() sur chacun de ces
objets. L'un des objets processus d'coute est le nouvel objet ActionListener (sans
nom) cr et enregistr dans la mthode jbInit() de l'applet.
L'implmentation de actionPerformed() par l'objet processus d'coute appelle la
mthode du gestionnaire.
Par dfaut, JDeveloper utilise des classes internes anonymes dans le code de gestion des
vnements qu'il gnre. Vous pouvez cependant le configurer pour qu'il cre une classe de
processus d'coute distincte (appele style d'adaptateur standard).
La procdure permettant de slectionner cette option de style de code est la suivante :
Slectionnez Tools > Preferences.
Slectionnez le noeud Java Visual Editor. Dans le volet Event Settings cliquez sur l'un
des boutons suivants :
- Anonymous Inner Class
- Standard Adapter
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java 17-32
Copyright 2008, Oracle. Tous droits rservs.
public class JFrame1 extends JFrame {
if (dayname.equals("Sat") || dayname.equals("Sun")){
System.out.println("Hooray for the weekend");
}
else if (dayname.equals("Mon")) {
System.out.println("I dont like Mondays");
}
else {
System.out.println("Not long for the weekend!");
}
Contrle du flux : switch
L'instruction switch est utilise pour comparer un entier (ou un caractre) une
liste fixe de valeurs :
int daynum;
switch (daynum) {
case 0:
case 6:
System.out.println("Hooray for the weekend");
break;
case 1:
System.out.println("I dont like Mondays");
break;
default:
System.out.println("Not long for the weekend!");
break;
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-4
Contrle du flux : Boucles
Java offre trois mcanismes de boucle :
int i = 0;
while (i < 100) {
System.out.println("Next square is: " + i*i);
i++;
}
for (int i = 0; i < 100; i++) {
System.out.println("Next square is: " + i*i);
}
int positiveValue;
do {
positiveValue = getNumFromUser();
}
while (positiveValue < 0);
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-5
Dfinir des classes
Lorsque vous dfinissez une classe, vous dfinissez les attributs de donnes
(gnralement private) et les mthodes (gnralement public) d'un nouveau
type de donnes. La dfinition de la classe est place dans un fichier .java, de la
faon suivante :
// This file is Student.java. The class is declared
// public, so that it can be used anywhere in the program
public class Student {
private String name;
private int numCourses = 0;
// Constructor to initialize all the data members
public Student(String n, int c) {
name = n;
numCourses = c;
}
// No-arg constructor, to initialize with defaults
public Student() {
this("Anon", 0); // Call other constructor
}
// finalize() is called when obj is garbage collected
public void finalize() {
System.out.println("Goodbye to this object");
}
// Other methods
public void attendCourse() {
numCourses++;
}
public void cancelPlaceOnCourse() {
numCourses--;
}
public boolean isEligibleForChampagne() {
return (numCourses >= 3);
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-6
Utiliser des classes
Pour crer un objet et lui envoyer des messages :
public class MyTestClass {
public static void main (String[] args) {
// Step 1 - Declare object references
// These refer to null initially in this example
Student me, you;
// Step 2 - Create new Student objects
me = new Student("Andy", 0);
you = new Student();
// Step 3 - Use the Student objects
me.attendCourse();
you.attendCourse();
if (me.isEligibleForChampagne())
System.out.println("Thanks very much");
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-7
Tableaux
Les tableaux se comportent comme des objets. Ils sont crs et manipuls de la
faon suivante :
// Step 1 - Declare a reference to an array
int[] squares; // Could write int squares[];
// Step 2 - Create the array "object" itself
squares = new int[5]; // Creates array with 5 slots
// Step 3 - Initialize slots in the array
for (int i=0; i < squares.length; i++) {
squares[i] = i * i;
System.out.println(squares[i]);
}
Notez que les lments d'un tableau commencent [0]. Par ailleurs, les tableaux
ont une proprit length qui indique leur taille. Si vous dpassez par
inadvertance les limites d'un tableau, une exception est gnre lors de l'excution
et le programme s'arrte.
Remarque : Il est galement possible de configurer un tableau en utilisant la
syntaxe abrge suivante : String[] cities = {
"San Francisco",
"Dallas",
"Minneapolis",
"New York",
"Washington, D.C."
};
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-8
Hritage et polymorphisme
Une classe peut hriter de toutes les donnes et mthodes d'une autre classe. Les
mthodes de la superclasse peuvent tre redfinies dans la sous-classe. Tout
membre de la superclasse auquel vous souhaitez accder dans la sous-classe doit
tre dclar avec le modificateur d'accs protected. L'lment est ainsi
accessible aux sous-classes, ainsi qu'aux ventuelles classes du mme package.
public class Account {
private double balance = 0.0;
public Account(double initBal) {
balance = initBal;
}
public void deposit(double amt) {
balance += amt;
}
public void withdraw(double amt) {
balance -= amt;
}
public void display() {
System.out.println("Balance is: " + balance);
}
}
public class CheckAccount extends Account {
private int maxChecks = 0;
private int numChecksWritten = 0;
public CheckAccount(double initBal, int maxChk) {
super(initBal); // Call superclass ctor
maxChecks = maxChk; // Initialize our data
}
public void withdraw(double amt) {
super.withdraw(amt); // Call superclass
numChecksWritten++; // Increment chk. num.
}
public void display() {
super.display(); // Call superclass
System.out.println(numChecksWritten);
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-9
Classes abstraites
Une classe abstraite est une classe qui ne peut jamais tre instancie. Autrement
dit, elle ne peut jamais tre utilise pour crer un objet. Les classes abstraites sont
dfinies de la faon suivante :
// Abstract superclass
public abstract class Mammal {
}
// Concrete subclasses
public class Cat extends Mammal {
}
public class Dog extends Mammal {
}
public class Mouse extends Mammal {
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-10
Mthodes abstraites
Une mthode abstraite est une mthode qui ne comporte pas de corps dans la
superclasse. Chaque sous-classe concrte est oblige de redfinir la mthode abstraite
et de fournir une implmentation, faute de quoi la sous-classe elle-mme est juge
abstraite car elle n'implmente pas toutes ses mthodes.
// Abstract superclass
public abstract class Mammal {
// Declare some abstract methods
public abstract void eat();
public abstract void move();
public abstract void reproduce();
// Define some data members if you like
private double weight;
private int age;
// Define some concrete methods too if you like
public double getWeight{} {
return weight;
}
public int getAge() {
return age;
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-11
Interfaces
Une interface est semblable une classe abstraite, avec des mthodes 100 %
abstraites et aucune variable d'instance. Une interface est dfinie de la faon
suivante :
public interface Runnable {
public void run();
}
Une classe peut implmenter une interface de la faon dtaille ci-aprs. Elle est
oblige de fournir une implmentation pour chaque mthode dfinie dans
l'interface, faute de quoi elle doit tre dclare abstract car elle n'implmente
pas toutes ses mthodes.
public class MyApp extends Applet implements Runnable {
public void run() {
// This is called when the Applet is kicked off
// in a separate thread
}
// Plus other applet methods
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-12
Variables static
Une variable static est comme une variable globale pour une classe. Autrement
dit, il n'existe qu'une seule instance de la variable pour l'ensemble de la classe,
quel que soit le nombre d'objets. Les variables static sont dclares dans la
classe de la faon suivante :
public class Account {
private String accnum; // Instance var
private double balance = 0.0; // Instance var
private static double intRate = 5.0; // Class var
}
Mthodes static
Dans une classe, une mthode static est une mthode qui ne peut accder
qu'aux lments static. Elle ne peut accder aucune donne ou mthode non
static. Les mthodes static sont dfinies de la faon suivante dans une
classe :
public class Account {
public static void setIntRate(double newRate) {
intRate = newRate;
}
public static double getIntRate() {
return intRate;
}
}
Pour appeler une mthode static, utilisez le nom de la classe comme suit :
public class MyTestClass {
public static void main(String[] args) {
System.out.println("Interest rate is" +
Account.getIntRate());
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-13
Packages
Les classes lies peuvent tre places dans un package commun, de la faon
suivante :
// Car.java
package mycarpkg;
public class Car {
}
// Engine.java
package mycarpkg;
public class Engine {
}
// Transmission.java
package mycarpkg;
public class Transmission {
}
Importer des packages
Quiconque doit utiliser les classes de ce package peut importer tout ou partie des
classes du package, de la faon suivante :
import mycarpkg.*; // import all classes in package
ou
import mycarpkg.Car; // just import individual classes
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-14
Mot-cl final
Le mot-cl final peut tre utilis dans trois situations :
Classes final (par exemple, il n'est pas possible d'hriter de cette classe).
Mthodes final (par exemple, la mthode ne peut pas tre redfinie dans une
sous-classe).
Variables final (par exemple, la variable est constante et ne peut pas tre
modifie).
Voici quelques exemples :
// final classes
public final class Color {
}
// final methods
public class MySecurityClass {
public final void validatePassword(String password) {
}
}
// final variables
public class MyTrigClass {
public static final double PI = 3.1415;
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
Oracle Fusion Middleware 11g : Programmation Java B-15
Traitement des exceptions
Le traitement des exceptions utilise cinq mots-cls en Java :
try Bloc de code o sont places les instructions pouvant gnrer une
exception.
catch Bloc de code dfinissant le traitement des erreurs.
finally Bloc de code facultatif aprs un bloc try, pour un traitement
inconditionnel.
throw Mot-cl utilis dans le code de bas niveau pour gnrer une exception.
Throws Mot-cl qui introduit la liste des exceptions qu'une mthode peut
gnrer.
Voici quelques exemples :
public class MyClass {
public void anyMethod() {
try {
func1();
func2();
func3();
}
catch (IOException e) {
System.out.println("IOException:" + e);
}
catch (MalformedURLException e) {
System.out.println("MalformedURLException:" + e);
}
finally {
System.out.println("This is always displayed");
}
}
public void func1() throws IOException {
}
public void func2() throws
MalformedURLException {
}
public void func3() throws IOException,
MalformedURLException {
}
}
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D
O
r
a
c
l
e
U
n
i
v
e
r
s
i
t
y
a
n
d
C
a
t
a
l
y
s
t
B
u
s
i
n
e
s
s
S
o
l
u
t
i
o
n
s
u
s
e
o
n
l
y
T
H
E
S
E
e
K
I
T
M
A
T
E
R
I
A
L
S
A
R
E
F
O
R
Y
O
U
R
U
S
E
I
N
T
H
I
S
C
L
A
S
S
R
O
O
M
O
N
L
Y
.
C
O
P
Y
I
N
G
e
K
I
T
M
A
T
E
R
I
A
L
S
F
R
O
M
T
H
I
S
C
O
M
P
U
T
E
R
I
S
S
T
R
I
C
T
L
Y
P
R
O
H
I
B
I
T
E
D