Programmer en Java
Claude Delannoy
Eyrolles
Avant-propos1
Chapitre 1 : Présentation de Java7
1 - Petit historique du langage
7
2 - Java et la programmation orientée objet
8
2.1 Les concepts d'objet et d'encapsulation8
2.2 Le concept de classe9
2.3 L'héritage9
2.4 Le polymorphisme10
2.5 Java est presque un pur langage de P.O.O.10
3 - Java et la programmation événementielle
11
3.1 interface console ou interface graphique11
3.1.1 Les programmes à interface console (ou en ligne de commande)
11
3.1.2 Les programmes à interface graphique (G.U.I.)
11
3.2 Les fenêtres associées à un programme12
3.2.1 Cas d'une interface console
12
3.2.2 Cas d'une interface graphique
12
3.3 Java et les interfaces12
3.3.1 La gestion des interfaces graphiques est intégrée dans Java
12
3.3.2 Applications et applets
13
3.3.3 on peut disposer d'une interface console en Java
13
3.3.4 Java 9 et JShell
14
4 - Java et la portabilité
14
Chapitre 2 : Généralités15
1 - Premier exemple de programme Java
15
1.1 Structure générale de programme16
1.2 Contenu du programme17
2 - Exécution d'un programme Java
18
3 - Quelques instructions de base
20
4 - Lecture d'informations au clavier
23
4.1 Présentation d'une classe de lecture au clavier23
4.2 Utilisation de cette classe24
4.3 Boucles et choix24
5 - Règles générales d'écriture
27
5.1 Les identificateurs27
5.2 Les mots-clés28
5.3 Les séparateurs29
5.4 Le format libre29
5.5 Les commentaires30
5.5.1 Les commentaires usuels
30
5.5.2 Les commentaires de fin de ligne
31
5.6 Emploi de code Unicode dans le programme source31
Chapitre 3 : Les types primitifs de Java33
1 - La notion de type
33
2 - Les types entiers
34
2.1 Représentation mémoire34
2.1.1 Cas d'un nombre positif
34
2.1.2 Cas d'un nombre négatif
35
2.2 Les différents types d'entiers35
2.3 Notation des constantes entières36
3 - Les types flottants
36
3.1 Les différents types et leurs représentations en mémoire36
3.2 Notation des constantes flottantes38
4 - Le type caractère
39
4.1 Généralités39
4.2 Écriture des constantes de type caractère39
5 - Le type booléen
42
6 - Initialisation et constantes
42
6.1 Initialisation d'une variable42
6.2 Cas des variables non initialisées43
6.3 Constantes et expressions constantes43
6.3.1 Le mot-clé final
43
6.3.2 Notion d'expression constante
44
6.3.3 L'initialisation d'une variable final peut être différée
44
7 - La déclaration var (Java 10)
45
Chapitre 4 : Les opérateurs et les expressions47
1 - Originalité des notions d'opérateur et d'expression
47
2 - Les opérateurs arithmétiques
49
2.1 Présentation des opérateurs49
2.2 Les priorités relatives des opérateurs50
2.3 Comportements en cas d'exception51
2.3.1 Cas des entiers
51
2.3.2 Cas des flottants
51
3 - Les conversions implicites dans les expressions
52
3.1 Notion d'expression mixte52
3.2 Les conversions d'ajustement de type53
3.3 Les promotions numériques53
3.4 Conséquences des règles de conversion54
3.5 Le cas du type char55
4 - Les opérateurs relationnels
56
4.1 Présentation générale56
4.2 Cas particulier des valeurs Infinity et NaN58
4.3 Cas des caractères58
4.4 Cas particulier des opérateurs (...) et !(...)58
5 - Les opérateurs logiques
59
5.1 Généralités59
5.2 Les opérateurs de court-circuit (...) et (...)60
5.3 Priorités60
6 - L'opérateur d'affectation usuel
61
6.1 Restrictions61
6.2 Associativité de droite à gauche62
6.3 Conversions par affectation62
6.3.1 Généralités
62
6.3.2 Quelques conséquences
63
6.3.3 Cas particulier des expressions constantes
64
7 - Les opérateurs d'incrémentation et de décrémentation
65
7.1 Leur rôle65
7.2 Leurs priorités66
7.3 Leur intérêt66
7.3.1 Alléger l'écriture
66
7.3.2 Éviter des conversions
67
8 - Les opérateurs d'affectation élargie
67
8.1 Présentation générale67
8.2 Conversions forcées68
9 - L'opérateur de cast
69
9.1 Présentation générale69
9.2 Conversions autorisées par cast70
9.3 Règles exactes des conversions numériques71
10 - Les opérateurs de manipulation de bits
72
10.1 Présentation générale72
10.2 Les opérateurs bit à bit73
10.3 Les opérateurs de décalage74
10.4 Exemples d'utilisation des opérateurs de bits75
11 - L'opérateur conditionnel
76
12 - Récapitulatif des priorités des opérateurs
77
Chapitre 5 : Les instructions de contrôle de Java79
1 - L'instruction if
80
1.1 Blocs d'instructions80
1.2 Syntaxe de l'instruction if81
1.3 Exemples81
1.4 Imbrication des instructions if82
2 - L'instruction switch
83
2.1 Exemples d'introduction83
2.1.1 Premier exemple
83
2.1.2 L'étiquette default
85
2.1.3 Un exemple plus général
86
2.2 Syntaxe de l'instruction switch87
2.3 Les nouvelles possibilités de l'instruction switch (Java 14)88
2.4 L'expression switch (Java 14)91
2.4.1 Présentation
91
2.4.2 L'instruction yield
91
3 - L'instruction do... while
92
3.1 Exemple d'introduction93
3.2 Syntaxe de l'instruction do... while94
4 - L'instruction while
95
4.1 Exemple d'introduction95
4.2 Syntaxe de l'instruction while95
5 - L'instruction for
96
5.1 Exemple d'introduction96
5.2 L'instruction for en général97
5.3 Syntaxe de l'instruction for98
6 - Les instructions de branchement inconditionnel break et continue
101
6.1 L'instruction break ordinaire101
6.2 L'instruction break avec étiquette102
6.3 L'instruction continue ordinaire103
6.4 L'instruction continue avec étiquette105
Chapitre 6 : Les classes et les objets107
1 - La notion de classe
108
1.1 Définition d'une classe Point108
1.1.1 Définition des champs
109
1.1.2 Définition des méthodes
109
1.2 Utilisation de la classe Point111
1.2.1 La démarche
111
1.2.2 Exemple
112
1.3 Mise en oeuvre d'un programme comportant plusieurs classes113
1.3.1 Un fichier source par classe
113
1.3.2 Plusieurs classes dans un même fichier source
114
2 - La notion de constructeur
116
2.1 Généralités116
2.2 Exemple de classe comportant un constructeur116
2.3 Quelques règles concernant les constructeurs117
2.4 Construction et initialisation d'un objet119
2.4.1 Initialisation par défaut des champs d'un objet
119
2.4.2 Initialisation explicite des champs d'un objet
119
2.4.3 Appel du constructeur
120
2.4.4 Cas des champs déclarés avec l'attribut final
121
3 - Éléments de conception des classes
123
3.1 Les notions de contrat et d'implémentation123
3.2 Typologie des méthodes d'une classe124
4 - Affectation et comparaison d'objets
125
4.1 Premier exemple125
4.2 Second exemple126
4.3 Initialisation de référence et référence nulle127
4.4 La notion de clone128
4.5 Comparaison d'objets129
5 - Le ramasse-miettes
129
6 - Règles d'écriture des méthodes
131
6.1 Méthodes fonction131
6.2 Les arguments d'une méthode132
6.2.1 Arguments muets ou effectifs
132
6.2.2 Conversion des arguments effectifs
132
6.3 Propriétés des variables locales133
7 - Champs et méthodes de classe
135
7.1 Champs de classe135
7.1.1 Présentation
135
7.1.2 Exemple
136
7.2 Méthodes de classe138
7.2.1 Généralités
138
7.2.2 Exemple
138
7.2.3 Autres utilisations des méthodes de classe
139
7.3 Initialisation des champs de classe140
7.3.1 Généralités
140
7.3.2 Bloc d'initialisation statique
140
8 - Surdéfinition de méthodes
141
8.1 Exemple introductif141
8.2 En cas d'ambiguïté142
8.3 Règles générales143
8.4 Surdéfinition de constructeurs144
8.5 Surdéfinition et droits d'accès146
9 - Échange d'informations avec les méthodes
147
9.1 Java transmet toujours les informations par valeur147
9.2 Conséquences pour les types primitifs147
9.3 Cas des objets transmis en argument148
9.3.1 L'unité d'encapsulation est la classe
148
9.3.2 Conséquences de la transmission de la référence d'un objet
150
9.4 Cas de la valeur de retour153
9.5 Autoréférence : le mot-clé this154
9.5.1 Généralités
154
9.5.2 Exemples d'utilisation de this
154
9.5.3 Appels d'un constructeur au sein d'un autre constructeur
155
10 - La récursivité des méthodes
156
11 - Les objets membres
158
12 - Les classes internes
161
12.1 Imbrication de définition de classe161
12.2 Lien entre objet interne et objet externe163
12.3 Exemple complet165
13 - Les paquetages
167
13.1 Attribution d'une classe à un paquetage167
13.2 Utilisation d'une classe d'un paquetage168
13.3 Les paquetages standards169
13.4 Paquetages et droits d'accès169
13.4.1 Droits d'accès aux classes
169
13.4.2 Droits d'accès aux membres d'une classe
170
13.5 Structure et localisation des paquetages : classpath171
13.5.1 Structure physique des paquetages
171
13.5.2 Localisation des paquetages
171
14 - Retour sur la déclaration var (Java 10)
172
Chapitre 7 : Les tableaux173
1 - Déclaration et création de tableaux
173
1.1 Introduction173
1.2 Déclaration de tableaux174
1.3 Création d'un tableau175
1.3.1 Création par l'opérateur new
175
1.3.2 Utilisation d'un initialiseur
175
2 - Utilisation d'un tableau
176
2.1 Accès individuel aux éléments d'un tableau176
2.2 Affectation de tableaux177
2.3 La taille d'un tableau : length179
2.4 Exemple de tableau d'objets179
2.5 Utilisation de la boucle for... each (JDK 5.0)180
2.6 Cas particulier des tableaux de caractères181
3 - Tableau en argument ou en retour
181
4 - Les tableaux à plusieurs indices
182
4.1 Présentation générale183
4.2 Initialisation184
4.3 Exemple185
4.4 For... each et les tableaux à plusieurs indices (JDK 5.0)186
4.5 Cas particulier des tableaux réguliers187
5 - Arguments variables en nombre (JDK 5.0)
187
5.1 Introduction187
5.2 Quelques règles concernant l'ellipse189
5.3 Adaptation des règles de recherche d'une méthode surdéfinie189
Chapitre 8 : L'héritage191
1 - La notion d'héritage
192
2 - Accès d'une classe dérivée aux membres de sa classe de base
195
2.1 une classe dérivée n'accède pas aux membres privés195
2.2 Elle accède aux membres publics195
2.3 Exemple de programme complet196
3 - Construction et initialisation des objets dérivés
198
3.1 Appels des constructeurs198
3.1.1 Exemple introductif
199
3.1.2 Cas général
201
3.2 Initialisation d'un objet dérivé203
4 - Dérivations successives
204
5 - Redéfinition et surdéfinition de membres
205
5.1 Introduction205
5.2 La notion de redéfinition de méthode205
5.3 Redéfinition de méthode et dérivations successives208
5.4 Surdéfinition et héritage208
5.5 Utilisation simultanée de surdéfinition et de redéfinition209
5.6 Cas particulier des méthodes et ellipse (JDK 5.0)210
5.7 Contraintes portant sur la redéfinition210
5.7.1 Valeur de retour
210
5.7.2 Cas particulier des valeurs de retour covariantes (JDK 5.0)
211
5.7.3 Les droits d'accès
212
5.8 Règles générales de redéfinition et de surdéfinition213
5.9 Duplication de champs214
6 - Le polymorphisme
215
6.1 Les bases du polymorphisme215
6.2 Généralisation à plusieurs classes219
6.3 Autre situation où l'on exploite le polymorphisme220
6.4 Polymorphisme, redéfinition et surdéfinition223
6.5 Conversions des arguments effectifs223
6.5.1 Cas d'une méthode non surdéfinie
224
6.5.2 Cas d'une méthode surdéfinie
224
6.6 Les règles du polymorphisme en Java225
6.7 Les conversions explicites de références226
6.8 Le mot-clé super227
6.9 Limites de l'héritage et du polymorphisme227
7 - La super-classe Object
228
7.1 Utilisation d'une référence de type Object229
7.2 Utilisation de méthodes de la classe Object229
7.2.1 La méthode toString
229
7.2.2 La méthode equals
231
8 - Les membres protégés
231
9 - Cas particulier des tableaux
232
10 - Classes et méthodes finales
233
11 - Les classes abstraites
234
11.1 Présentation234
11.2 Quelques règles235
11.3 Intérêt des classes abstraites236
11.4 Exemple236
12 - Les interfaces
238
12.1 Mise en oeuvre d'une interface238
12.1.1 Définition d'une interface
238
12.1.2 Implémentation d'une interface
238
12.2 Variables de type interface et polymorphisme239
12.3 Interface et classe dérivée240
12.4 Interfaces et constantes241
12.5 Dérivation d'une interface241
12.6 Conflits de noms242
12.7 Méthodes par défaut et méthodes statiques (Java 8)243
12.8 L'interface Cloneable245
13 - Les classes enveloppes
245
13.1 Construction et accès aux valeurs246
13.2 Comparaisons avec la méthodes equals246
13.3 Emballage et déballage automatique (JDK 5.0)246
13.3.1 Présentation
246
13.3.2 Limitations
247
13.3.3 Conséquences sur la surdéfinition des méthodes
247
14 - Éléments de conception des classes
248
14.1 Respect du contrat248
14.2 Relations entre classes248
14.3 Différences entre interface et héritage249
15 - Les classes anonymes
250
15.1 Exemple de classe anonyme250
15.2 Les classes anonymes d'une manière générale251
15.2.1 Il s'agit de classes dérivées ou implémentant une interface
251
15.2.2 Utilisation de la référence à une classe anonyme
252
15.2.3 Accès aux variables de la classe englobante
252
16 - Attention à la déclaration var (Java 10)
252
Chapitre 9 : Les chaînes de caractères et les types énumérés255
1 - Fonctionnalités de base de la classe String
256
1.1 Introduction256
1.2 Un objet de type String n'est pas modifiable256
1.3 Entrées-sorties de chaînes257
1.4 Longueur d'une chaîne : length258
1.5 Accès aux caractères d'une chaîne : charAt258
1.6 Concaténation des chaînes259
1.7 Conversions des opérandes de l'opérateur+260
1.8 L'opérateur+=261
1.9 Écriture des constantes chaînes262
1.10 Simplification de l'écriture des blocs de texte (Java 14)262
2 - Recherche dans une chaîne
264
3 - Comparaisons de chaînes
265
3.1 Les opérateurs = et !=265
3.2 La méthode equals266
3.3 La méthode compareTo266
3.4 Utilisation de chaînes dans l'instruction switch267
4 - Modification de chaînes
268
5 - Tableaux de chaînes
269
6 - Conversions entre chaînes et types primitifs
270
6.1 Conversion d'un type primitif en une chaîne270
6.2 Les conversions d'une chaîne en un type primitif272
7 - Conversions entre chaînes et tableaux de caractères
274
8 - Les arguments de la ligne de commande
275
9 - La classe StringBuffer
276
10 - Les types énumérés (JDK 5.0)
277
10.1 Définition d'un type énuméré278
10.2 Comparaisons de valeurs d'un type énuméré278
10.2.1 Comparaisons d'égalité
278
10.2.2 Comparaisons basées sur un ordre
278
10.2.3 Exemple récapitulatif
279
10.3 Utilisation d'un type énuméré dans une instruction switch279
10.4 Conversions entre chaînes et types énumérés280
10.5 Itération sur les valeurs d'un type énuméré281
10.6 Lecture des valeurs d'un type énuméré282
10.7 Ajout de méthodes et de champs à une classe d'énumération283
10.7.1 Introduction
283
10.7.2 Cas particulier des constructeurs
284
Chapitre 10 : La gestion des exceptions285
1 - Premier exemple d'exception
286
1.1 Comment déclencher une exception avec throw286
1.2 Utilisation d'un gestionnaire d'exception287
1.3 Le programme complet287
1.4 Premières propriétés de la gestion d'exception288
2 - Gestion de plusieurs exceptions
290
3 - Transmission d'information au gestionnaire d'exception
292
3.1 Par l'objet fourni à l'instruction throw292
3.2 Par le constructeur de la classe exception293
4 - Le mécanisme de gestion des exceptions
294
4.1 Poursuite de l'exécution295
4.2 Choix du gestionnaire d'exception296
4.3 Cheminement des exceptions297
4.4 La clause throws298
4.5 Redéclenchement d'une exception298
4.6 Le bloc finally301
4.7 Gestion automatique des ressources (depuis le JDK7.0)303
5 - Les exceptions standards
303
6 - La méthode printStackTrace
305
Chapitre 11 : Les threads307
1 - Exemple introductif
308
2 - Utilisation de l'interface Runnable
310
3 - Interruption d'un thread
313
3.1 Démarche usuelle d'interruption par un autre thread313
3.2 Threads démons et arrêt brutal315
4 - Coordination de threads
317
4.1 Méthodes synchronisées317
4.2 Exemple318
4.3 Notion de verrou320
4.4 L'instruction synchronized321
4.5 Interblocage321
4.6 Attente et notification322
5 - États d'un thread
326
6 - Priorités des threads
327
Chapitre 12 : Les bases de la programmation graphique329
1 - Première fenêtre
330
1.1 La classe JFrame330
1.2 Arrêt du programme332
1.3 Création d'une classe fenêtre personnalisée332
1.4 Action sur les caractéristiques d'une fenêtre333
2 - Gestion d'un clic dans la fenêtre
335
2.1 Implémentation de l'interface MouseListener335
2.2 Utilisation de l'information associée à un événement338
2.3 La notion d'adaptateur339
2.4 La gestion des événements en général341
3 - Premier composant : un bouton
342
3.1 Création d'un bouton et ajout dans la fenêtre342
3.2 Affichage du bouton : la notion de gestionnaire de mise en forme342
3.3. Gestion du bouton avec un écouteur345
4 - Gestion de plusieurs composants
346
4.1 La fenêtre écoute les boutons347
4.1.1 Tous les boutons déclenchent la même réponse
347
4.1.2 La méthode getSource
348
4.1.3 La méthode getActionCommand
350
4.2 Classe écouteur différente de la fenêtre352
4.2.1 Une classe écouteur pour chaque bouton
352
4.2.2 Une seule classe écouteur pour les deux boutons
353
4.3 Dynamique des composants355
5 - Premier dessin
358
5.1 Création d'un panneau359
5.2 Dessin dans le panneau360
5.3 Forcer le dessin362
5.4 Ne pas redéfinir inutilement paintComponent364
5.5 Notion de rectangle invalide365
6 - Dessiner à la volée
365
7 - Gestion des dimensions
368
7.1 Connaître les dimensions de l'écran368
7.2 Connaître les dimensions d'un composant368
7.3 Agir sur la taille d'un composant369
7.3.1 Agir sur la « taille préférentielle » d'un composant
369
7.3.2 Agir sur la taille maximale ou la taille minimale d'un composant
371
Chapitre 13 : Les contrôles usuels373
1 - Les cases à cocher
374
1.1 Généralités374
1.2 Exploitation d'une case à cocher374
1.2.1 Réaction à l'action sur une case à cocher
374
1.2.2 État d'une case à cocher
375
1.3 Exemple375
2 - Les boutons radio
377
2.1 Généralités377
2.2 Exploitation de boutons radio378
2.2.1 Réaction à l'action sur un bouton radio
378
2.2.2 État d'un bouton radio
379
2.3 Exemples379
3 - Les étiquettes
383
3.1 Généralités383
3.2 Exemple383
4 - Les champs de texte
385
4.1 Généralités385
4.2 Exploitation usuelle d'un champ de texte385
4.3 Exploitation fine d'un champ de texte390
5 - Les boîtes de liste
391
5.1 Généralités391
5.2 Exploitation d'une boîte de liste393
5.2.1 Accès aux informations sélectionnées
393
5.2.2 Événements générés par les boîtes de liste
394
5.3 Exemple395
6 - Les boîtes combo
397
6.1 Généralités397
6.1.1 La boîte combo pour l'utilisateur du programme
397
6.1.2 Construction d'une boîte combo
398
6.2 Exploitation d'une boîte combo398
6.2.1 Accès à l'information sélectionnée ou saisie
399
6.2.2 Les événements générés par une boîte combo
399
6.2.3 Exemple
400
6.3 Évolution dynamique de la liste d'une boîte combo401
6.3.1 Les principales possibilités
401
6.3.2 Exemple
401
7 - Exemple d'application
403
Chapitre 14 : Les boîtes de dialogue407
1 - Les boîtes de message
407
1.1 La boîte de message usuelle408
2.2 Autres possibilités409
2 - Les boîtes de confirmation
410
2.1 La boîte de confirmation usuelle410
2.2 Autres possibilités412
3 - Les boîtes de saisie
413
3.1 La boîte de saisie usuelle413
3.2 Autres possibilités414
4 - Les boîtes d'options
414
5 - Les boîtes de dialogue personnalisées
417
5.1 Construction et affichage d'une boîte de dialogue417
5.1.1 Construction
417
5.1.2 Affichage
418
5.1.3 Exemple
418
5.1.4 Utilisation d'une classe dérivée de JDialog
419
5.2 Exemple simple de boîte de dialogue420
5.2.1 Introduction des composants
420
5.2.2 Gestion du dialogue
421
5.2.3 Récupération des informations
422
5.2.4 Gestion de l'objet boîte de dialogue
422
5.2.5 Exemple complet
422
5.3 Canevas général d'utilisation d'une boîte de dialogue modale425
6 - Exemple d'application
426
Chapitre 15 : Les menus, les actions et les barres d'outils431
1 - Les principes des menus déroulants
432
1.1 Création432
1.2 Événements générés433
1.3 Exemple433
2 - Les différentes sortes d'options
435
3 - Les menus surgissants
438
4 - Raccourcis clavier
441
4.1 Les caractères mnémoniques441
4.2 Les accélérateurs442
4.3 Exemple443
5 - Les bulles d'aide
444
6 - Composition des options
445
6.1 Exemple avec des menus déroulants usuels445
6.2 Exemple avec un menu surgissant446
7 - Menus dynamiques
447
7.1 Activation et désactivation d'options447
7.2 Modification du contenu d'un menu448
8 - Les actions
448
8.1 Présentation de la notion d'action abstraite448
8.1.1 Définition d'une classe action
449
8.1.2 Rattachement d'une action à un composant
449
8.1.3 Gestion des événements associés à une action
449
8.1.4 Exemple complet
450
8.2 Association d'une même action à plusieurs composants451
8.3 Cas des boutons453
8.4 Autres possibilités de la classe AbstractAction455
8.4.1 Informations associées à la classe AbstractAction
455
8.4.2 Activation/désactivation d'options
456
9 - Les barres d'outils
456
9.1 Généralités456
9.2 Barres d'outils flottantes ou intégrées458
9.3 Utilisation d'icônes dans les barres d'outils458
9.4 Association d'actions à une barre d'outils459
10 - Exemple d'application
460
Chapitre 16 : Les événements de bas niveau465
1 - Les événements liés à la souris
466
1.1 Gestion de l'appui et du relâchement des boutons466
1.2 Identification du bouton et clics multiples468
1.3 Gestion des déplacements de la souris470
1.4 Exemple de sélection de zone472
2 - Les événements liés au clavier
474
2.1 Les événements générés474
2.2 Identification des touches475
2.3 Exemple477
2.4 État des touches modificatrices478
2.5 Source d'un événement clavier479
2.6 Capture de certaines actions du clavier479
2.6.1 Capture par la fenêtre
479
2.6.2 Capture par des actions
480
2.7 Exemple combinant clavier et souris482
3 - Les événements liés aux fenêtres
484
3.1 Généralités484
3.2 Arrêt du programme sur fermeture de la fenêtre485
4 - Les événements liés à la focalisation
485
4.1 Généralités485
4.2 Forcer le focus486
4.3 Exemple487
Chapitre 17 : Les gestionnaires de mise en forme489
1 - Le gestionnaire BorderLayout
490
2 - Le gestionnaire FlowLayout
492
3 - Le gestionnaire CardLayout
494
4 - Le gestionnaire GridLayout
497
5 - Le gestionnaire BoxLayout
498
5.1 Généralités498
5.2 Exemple de box horizontal499
5.3 Exemple de box vertical500
5.4 Modifier l'espacement avec strut et glue501
6 - Le gestionnaire GirdBagLayout
503
6.1 Présentation générale503
6.2 Exemple504
7 - Le gestionnaire GroupLayout
506
7.1 Exemple d'introduction507
7.2 Exemple avec deux groupes509
Chapitre 18 : Textes et graphiques513
1 - Déterminer la position du texte
514
1.1 Deux textes consécutifs sur une même ligne514
1.2 Affichage de deux lignes consécutives516
1.3 Les différentes informations relatives à une fonte517
2 - Choix de fontes
518
2.1 Les fontes logiques519
2.2 Les fontes physiques521
3 - Les objets couleur
524
3.1 Les constantes couleur prédéfinies524
3.2 Construction d'un objet couleur524
4 - Les tracés de lignes
525
4.1 Généralités525
4.2 Lignes droites, rectangles et ellipses526
4.3 Rectangles à coins arrondis527
4.4 Polygones et lignes brisées528
4.5 Tracés d'arcs530
5 - Remplissage de formes
531
6 - Mode de dessin
533
7 - Affichage d'images
536
7.1 Formats d'images536
7.2 Charger une image et l'afficher536
7.2.1 Chargement d'une image avec attente
537
7.2.2 Chargement d'une image sans attente
539
Chapitre 19 : Les applets541
1 - Première applet
541
2 - Lancement d'une applet
543
2.1 Généralités543
2.2 Fichier HTML de lancement d'une applet544
3 - La méthode init
545
3.1 Généralités545
3.2 Exemple546
4 - Différents stades de la vie d'une applet
547
5 - Transmission d'informations à une applet
549
6 - Restrictions imposées aux applets
551
7 - Transformation d'une application graphique en une applet
551
Chapitre 20 : les flux et les fichiers557
1 - Création séquentielle d'un fichier binaire
558
1.1 Généralités558
1.2 Exemple de programme559
2 - Liste séquentielle d'un fichier binaire
561
2.1 Généralités561
2.2 Exemple de programme562
3 - Accès direct à un fichier binaire
564
3.1 Introduction564
3.2 Exemple d'accès direct à un fichier existant565
3.3 Les possibilités de l'accès direct566
3.4 En cas d'erreur566
3.4.1 Erreur de pointage
566
3.4.2 Positionnement hors fichier
567
4 - Les flux texte
568
4.1 Introduction568
4.2 Création d'un fichier texte569
4.2.1 Généralités
569
4.2.2 Exemple
570
4.3 Exemple de lecture d'un fichier texte571
4.3.1 Accès aux lignes d'un fichier texte
572
4.3.2 La classe StringTokenizer
573
5 - Les flux d'objets
576
5.1 Généralités576
5.2 Exemple de création d'un flux d'objets577
5.3 Exemple de lecture d'un flux d'objets577
5.4 Cas des objets comportant des références à d'autres objets578
5.5 Autres propriétés des flux d'objets579
6 - La gestion des fichiers avec la classe File
579
6.1 Création d'objets de type File579
6.2 Utilisation d'objets de type File dans les constructeurs de flux581
6.3 Exploitation d'objets de type File581
7 - Les flux en général
583
7.1 Généralités584
7.2 Les flux binaires de sortie585
7.3 Les flux binaires d'entrée586
7.4 Les fichiers à accès direct588
7.5 Les flux texte de sortie588
7.6 Les flux texte d'entrée590
8 - Les sockets
591
8.1 Côté serveur591
8.2 Côté client592
9 - Les nouvelles possibilités NIO.2 (JDK 7)
593
9.1 La gestion de fichier avec les objets de type Path593
9.1.1 Création d'un objet de type Path
593
9.1.2 Exploitation d'objets de type Path
594
9.1.3 Parcours d'un répertoire
596
9.1.4 Accès aux métadonnées
597
9.1.5 Autres possibilités
597
9.2 NIO.2 et les flux597
9.2.1 Nouvelles méthodes de création de flux binaires
598
9.2.2 Nouvelles méthodes de création de flux texte
598
9.2.3 Méthodes pour les petits fichiers
598
9.2.4 Canaux et tampons
599
Chapitre 21 : La programmation générique601
1 - Notion de classe générique
602
1.1 Exemple de classe générique à un seul paramètre de type602
1.1.1 Définition de la classe
602
1.1.2 Utilisation de la classe
603
1.2 Exemple de classe générique à plusieurs paramètres de type604
2 - Compilation du code générique
605
2.1 Introduction605
2.2 Compilation d'une classe générique606
2.3 Compilation de l'utilisation d'une classe générique606
2.4 Limitations portant sur les classes génériques607
2.4.1 On ne peut pas instancier un objet d'un type paramétré
607
2.4.2 On ne peut pas instancier de tableaux d'éléments d'un type générique
608
2.4.3 Seul le type brut est connu lors de l'exécution
608
2.4.4 Autres limitations
609
3 - Méthodes génériques
610
3.1 Exemple de méthode générique à un seul argument610
3.2 Exemple de méthode générique à deux arguments611
4 - Limitations des paramètres de type
613
4.1 Exemple avec une classe générique613
4.2 Exemple avec une méthode générique614
4.3 Règles générales614
5 - Héritage et programmation générique
615
5.1 Dérivation d'une classe générique615
5.2 Si T' dérive du T, C(...)T'(...) ne dérive pas de C(...)T(...)616
5.3 Préservation du polymorphisme618
6 - Les jokers
619
6.1 Le concept de joker simple619
6.2 Jokers avec limitations620
6.3 Joker appliqué à une méthode621
Chapitre 22 : Les collections et les algorithmes623
1 - Concepts généraux utilisés dans les collections
624
1.1 La généricité suivant la version de Java624
1.2 Ordre des éléments d'une collection625
1.2.1 Utilisation de la méthode compareTo
626
1.2.2 Utilisation d'un objet comparateur
626
1.3 Égalité d'éléments d'une collection627
1.4 Les itérateurs et leurs méthodes628
1.4.1 Les itérateurs monodirectionnels : l'interface Iterator
628
1.4.2 Les itérateurs bidirectionnels : l'interface ListIterator
631
1.4.3 Les limitations des itérateurs
633
1.5 Efficacité des opérations sur les collections634
1.6 Opérations communes à toutes les collections634
1.6.1 Construction
635
1.6.2 Opérations liées à un itérateur
635
1.6.3 Modifications indépendantes d'un itérateur
636
1.6.4 Opérations collectives
636
1.6.5 Autres méthodes
637
1.7 Structure générale des collections638
2 - Les listes chaînées - classe LinkedList
639
2.1 Généralités639
2.2 Opérations usuelles639
2.3 Exemples641
2.4 Autres possibilités peu courantes643
2.5 Méthodes introduites par Java 5 et Java 6644
3 - Les vecteurs dynamiques - classe ArrayList
644
3.1 Généralités644
3.2 Opérations usuelles645
3.3 Exemple647
3.4 Gestion de l'emplacement d'un vecteur648
3.5 Autres possibilités peu usuelles648
3.6 L'ancienne classe Vector649
4 - Les ensembles
649
4.1 Généralités649
4.2 Opérations usuelles650
4.3 Exemple652
4.4 Opérations ensemblistes653
4.5 Les ensembles HashSet655
4.5.1 Notion de table de hachage
655
4.5.2 La méthode hashCode
657
4.5.3 Exemple
657
4.6 Les ensembles TreeSet659
4.6.1 Généralités
659
4.6.2 Exemple
659
5 - Les queues (JDK 5.0)
660
5.1 L'interface Queue660
5.2 Les classes implémentant l'interface Queue661
6 - Les queues à double entrée Deque (Java 6)
661
6.1 L'interface Deque661
6.2 La classe ArrrayDeque662
7 - Les algorithmes
662
7.1 Recherche de maximum ou de minimum663
7.2 Tris et mélanges664
7.3 Autres algorithmes665
8 - Les tables associatives
666
8.1 Généralités666
8.2 Implémentation666
8.3 Présentation générale des classes HashMap et TreeMap667
8.4 Parcours d'une table ; notion de vue668
8.5 Autres vues associées à une table669
8.6 Exemple669
9 - Vues synchronisées ou non modifiables
672
10 - Retour sur la déclaration var (Java 10)
672
Chapitre 23 : Expressions lambda et streams675
1 - Introduction aux expressions lambda
675
1.1 Premiers exemples d'expression lambda676
1.2 Autre situation utilisant une expression lambda678
2 - Interface fonctionnelle
679
2.1 Notion d'interface fonctionnelle679
2.2 Interfaces fonctionnelles standards679
3 - Quelques règles
682
3.1 Syntaxe des expressions lambda682
3.2 Contexte d'utilisation d'une expression lambda683
3.2.1 Expression lamda dans une instruction return
683
3.2.2 Composition d'expressions lambda
684
3.2.3 Tableau d'expressions lambda
684
3.3 Règles de compatibilité685
3.4 Expressions lambdas et portée des variables685
4 - Références de méthodes
686
4.1 Référence à une méthode statique686
4.2 Référence à une méthode de classe687
4.3 Référence à une méthode associée à un objet688
4.4 Références à un constructeur689
5 - Utilisation en programmation événementielle
690
6 - La méthode forEach
690
7 - Les nouvelles méthodes de l'interface Comparator
691
8 - Présentation des streams
693
9 - Différentes façons de créer un stream
694
9.1 Les différents types de streams694
9.1.1 Nature des éléments
694
9.1.2 Stream séquentiel ou parallèle, ordre d'un stream
695
9.2 Les différentes sources d'un stream696
9.2.1 Création à partir d'une collection
696
9.2.2 Création à partir d'une liste de valeurs
696
9.2.3 Création avec une fonction génératrice
696
9.2.4 Création avec une méthode itérative
697
9.2.5 Création d'un stream parallèle
697
9.2.6 Exemple
698
10 - Les méthodes intermédiaires d'un stream
699
10.1 La méthode map699
10.2 La méthode sorted699
10.3 La méthode peek700
10.4 Quelques autres méthodes700
10.5 Exemple700
11 - Les méthodes terminales d'un stream
701
12 - La méthode reduce
703
13 - La méthode collect
704
Chapitre 24 : L'introspection et les annotations707
1 - Les bases de l'introspection : le type Class
708
1.1 Déclaration d'instances du type Class708
1.2 Le champ class et La méthode getClass708
1.3 La méthode getName710
1.4 Exemple de programme710
2 - Accès aux informations relatives à une classe
711
2.1 Généralités : les types Field, Method et Constructor711
2.2 Exemple d'accès aux noms de champs et méthodes712
2.3 Accès aux autres informations714
2.3.1 Des champs
714
2.3.2 Des méthodes
715
2.3.3 Test d'appartenance
717
3 - Consultation et modification des champs d'un objet
718
4 - La notion d'annotation
720
4.1 Exemple simple d'annotation720
4.2 Les paramètres d'une annotation721
4.2.1 Présentation
721
4.2.2 Paramètres par défaut
722
4.2.3 Cas particulier du paramètre nommé value
722
4.2.4 Un paramètre peut être un tableau
723
5 - Les méta-annotations standards
723
5.1 La méta-annotation @Retention723
5.2 La méta-annotation @Target724
5.3 La méta-annotation @Inherit725
5.4 La méta-annotation @Documented726
6 - Les annotations standards
726
6.1 @Override726
6.2 @Deprecated727
6.3 @Suppress Warning727
6.4 @Generated (Java 6)727
7 - Syntaxe générale des annotations
728
8 - Exploitation des annotations par introspection
729
8.1 Test de présence et récupération des paramètres729
8.2 Obtenir toutes les annotations présentes sur un élément731
Chapitre 25 : La gestion du temps, des dates et des heures (Java 8)733
1 - Instants et durées (temps machine)
734
1.1 La définition de la seconde734
1.2 Exemples d'introduction734
1.2.1 Calcul d'une durée d'exécution
734
1.2.2 Réalisation d'une boucle de durée déterminée
735
1.3 Les possibilités des classes Instant et Duration736
2 - La classe LocalDate
737
2.1 Exemple737
2.2 D'une manière générale738
2.3 Ajustement de date739
3 - La classe LocalTime
740
4 - La classe LocalDate Time
742
5 - Gestion du temps avec fuseau horaire
743
6 - Formatage de dates
745
Chapitre 26 : Les modules (Java 9)747
1 - Les modules comblent certaines lacunes des paquetages
748
2 - Exemple introductif
749
2.1 Structures des modules sources750
2.2 Compilation des modules750
3 - Déclarations de modules
751
3.1 Structure d'un fichier de déclaration de module751
3.2 Les instructions d'un fichier de déclaration de module752
3.2.1 exports
752
3.2.2 requires
752
3.2.3 opens
753
4 - Localisation des modules : module path
754
5 - Compatibilité de Java 9 avec les versions antérieures
754
5.1 Les modules anonymes755
5.2 Les modules automatiques755
5.3 Récapitulatif des différents types de modules756
5.4 Relaxation des contraintes d'encapsulation756
Chapitre 27 : JShell (Java 9)757
1 - Exemples introductifs
757
1.1 Premiers snippets758
1.2 Premières commandes759
1.3 Mettre fin à une session : /exit760
1.4 Créer un snippet s'étendant sur plusieurs lignes760
1.5 On peut réexécuter un snippet à volonté761
2 - Édition de snippets
762
3 - JShell et le snippet import
764
4 - Situations d'erreur
765
4.1 Erreurs dans l'écriture des snippets765
4.2 Exceptions lors de l'exécution d'un snippet767
4.3 La commande /drop767
5 - Déclaration de types
768
6 - Déclaration de méthodes indépendantes
769
7 - Gestion des sessions
770
7.1 Choix des informations affichées770
7.2 Historique des commandes passées771
7.3 Sauvegarde et récupération d'une session772
7.3.1 Snippets seuls
772
7.3.2 Snippets et commandes
774
7.4 Utilisation de code existant774
7.5 Paramètres-start et-all775
7.6 Réinitialisation et restauration de session775
7.6.1 La commande / reset
775
7.6.2 La commande / reload
776
8 - Gestion de l'environnement
777
8.1 Utiliser une classe déjà compilée dans un paquetage777
8.2 Utiliser un module existant778
8.2.1 Utilisation dans JShell d'une classe d'un module
778
8.2.2 Exécution d'une méthode main d'un module
779
8.3 Définir des snippets et commandes de démarrage780
Chapitre 28 : La programmation Java côté serveur : servlets et JSP783
1 - Première servlet
784
1.1 Écriture de la servlet784
1.1.1 La classe HttpServlet et la méthode doGet
784
1.1.2 Construction de la réponse au client
785
1.2 Exécution de la servlet depuis le client786
1.3 Installation de la servlet sur le serveur786
1.4 Test du fonctionnement d'une servlet787
2 - Transmission de paramètres à une servlet
788
2.1 Transmission de paramètres par GET789
2.1.1 Appel de la servlet
789
2.1.2 Écriture de la servlet
789
2.1.3 Exemple d'exécution
791
2.2 Utilisation d'un formulaire HTML791
2.3 Utilisation de la méthode POST793
3 - Cycle de vie d'une servlet : les méthodes init et destroy
795
4 - Exemple de servlet de calcul de factorielles
797
5 - Premières notions de JSP
799
5.1 Présentation des JSP799
5.2 Notion de scriptlet799
5.3 Exécution d'un JSP800
6 - Transmission de paramètres à un JSP : l'objet request
801
7 - Les différents éléments de script d'un JSP
802
7.1 Possibilités algorithmiques des scriptlets803
7.2 Les expressions803
7.2.1 Introduction
803
7.2.2 Exemples
804
7.2.3 Les expressions d'une manière générale
805
7.3 Commentaires805
7.4 Les balises de déclaration806
7.4.1 Présentation
806
7.4.2 Exemple de déclaration de variables d'instances (champs)
806
7.4.3 Déclarations de méthodes d'instance
808
7.4.4 Les balises de déclaration en général
808
7.5 Exemple de JSP de calcul de factorielles808
8 - Utilisation de JavaBeans dans des JSP
810
8.1 Introduction à la notion de JavaBean810
8.1.1 Utilisation d'un objet usuel dans un JSP
810
8.1.2 Utilisation d'un objet de type JavaBean
811
8.2 Utilisation directe de paramètres dans des JavaBeans813
8.3 Exemple d'utilisation d'une classe Point transformée en JavaBean813
8.4 Portée d'un JavaBean815
8.4.1 Notion de suivi de session
815
8.4.2 Suivi de session avec les JSP et les JavaBeans
815
8.4.3 Les différentes portées d'un JavaBean
816
8.5 Informations complémentaires sur les JavaBeans816
9 - Possibilités de composition des JSP
817
9.1 Inclusion statique d'une page JSP dans une autre817
9.2 Chaînage de JSP817
9.3 Inclusion dynamique de JSP818
10 - Architecture des applications Web
818
Chapitre 29 : Utilisation de bases de données avec JDBC819
1 - Introduction
819
2 - un premier exemple
821
2.1 Choix du pilote821
2.2 Établissement d'une connexion822
2.3 Interrogation de la base823
2.4 Exploitation du résultat823
2.5 Libération des ressources824
2.6 Le programme complet824
3 - Les requêtes SQL
826
3.1 Généralités826
3.2 Requêtes de sélection826
3.3 Requêtes de mise à jour828
3.4 Requêtes de gestion829
4 - Exécution d'une requête SQL
830
5 - Exploitation des résultats d'une sélection SQL
830
5.1 Les types SQL et les méthodes d'accès831
5.2 Parcours et actualisation des données832
5.2.1 Choix du mode de parcours et d'actualisation des résultats
833
5.2.2 Les méthodes agissant sur le curseur
834
5.2.3 Actualisation de la base
835
5.2.4 Exemple 1
836
5.2.5 Exemple 2
837
6 - Les requêtes préparées
839
7 - L'interface Rowset
842
7.1 Introduction842
7.2 La classe JDBCRowSetImpl843
7.2.1 Construction à partir d'un objet de type ResultSet
843
7.2.2 Construction d'un objet autonome
844
7.3 La classe CachedRowSetImpl845
7.3.1 Construction à partir d'un objet de type ResultSet
845
7.3.2 Construction d'un objet autonome
846
8 - Les métadonnées
848
8.1 Généralités848
8.2 Métadonnées associées à un résultat849
8.2.1 Exemple 1
849
8.2.2 Exemple 2
850
8.3 Métadonnées associées à la base851
8.3.1 Informations sur le SGDBR et le pilote
852
8.3.2 Informations sur la structure de la base
853
9 - Les transactions
855
Chapitre 30 : Introduction aux Design Patterns859
1 - Généralités
860
1.1 Historique860
1.2 Patterns et P.O.O861
1.3 Patterns et C.O.O861
2 - Les patterns de construction
862
2.1 Le pattern Factory Method (Fabrique)862
2.1.1 Premier exemple
862
2.1.2 Deuxième exemple
864
2.1.3 Discussion
865
2.2 Le pattern Abstract Factory (Fabrique Abstraite)866
2.2.1 Présentation
866
2.2.2 Discussion
868
3 - Les patterns de structure
869
3.1 Le pattern Composite869
3.1.1 Présentation
869
3.1.2 Discussion
872
3.2 Le pattern Adapter (Adaptateur)872
3.2.1 Adaptateur d'objet
873
3.2.2 Adaptateur de classe
874
3.2.3 Discussion
876
3.3 Le pattern Decorator (Décorateur)876
3.3.1 Présentation
876
3.3.2 Classe abstraite de décorateurs
878
3.3.3 Discussion
879
4 - Les patterns comportementaux
880
4.1 Le pattern Strategy (Stratégie)880
4.1.1 Présentation
880
4.1.2 Discussion
882
4.2 Le pattern Template Method (Patron de méthode)883
4.2.1 Présentation
883
4.2.2 Discussion
884
4.3 Le pattern Observer (Observateur)885
4.3.1 Sa mise en oeuvre en Java
885
4.3.2 Discussion
885
4.3.3 Le pattern Observer en général
888
Annexes891
Annexe A : Les droits d'accès aux membres, classes et interfaces893
1 - Modificateurs d'accès des classes et interfaces
893
2 - Modificateurs d'accès pour les membres et les classes internes
894
3 - Modificateurs d'accès pour les méthodes des interfaces
894
Annexe B : La classe Clavier895
Annexe C : Les constantes et fonctions mathématiques899
Annexe D : Les exceptions standards901
1 - Paquetage standard (java.lang)
901
1.1 Exceptions explicites901
1.2 Exceptions implicites902
2 - Paquetage java.io
902
3 - Paquetage java.awt
903
3.1 Exceptions explicites903
3.2 Exceptions implicites903
4 - Paquetage java.util
903
4.1 Exceptions explicites903
4.2 Exceptions implicites903
Annexe E : Les composants graphiques et leurs méthodes905
1 - Les classes de composants
906
2 - Les méthodes
907
Annexe F : Les événements et les écouteurs915
1 - Les événements de bas niveau
916
2 - Les événements sémantiques
917
3 - Les méthodes des événements
918
Annexe G : Les collections921
1 - Les interfaces
922
2 - Les classes implémentant List
927
3 - Les classes implémentant Set
928
4 - Les classes implémentant Queue (depuis JKD5 seulement)
929
5 - Les classes implémentant Deque (depuis JDK5 seulement)
929
6 - Les classes implémentant Map
930
7 - Les algorithmes de la classe Collections
930
Annexe H : Professionnalisation des applications935
1 - Incorporation d'icônes dans la barre des tâches
935
2 - La classe Desktop
937
3 - La classe Console
939
4 - Action sur l'aspect des composants
941
Index943