Note Java
Note Java
Tête la première
2e édition
Autres titres sur Java chez O’Reilly
En français
Ant - précis & concis
Design Patterns - Tête la première
Développement Web avec J2EE
Eclipse
Exemples en Java in a Nutshell
Enterprise JavaBeans
Introduction à Java
Jakarta Struts - précis & concis
Java 2D Graphics
Java en concentré
Java Enterprise in a Nutshell
Java en action
Java et SOAP
Java et XML
Java et XSLT
Java, plus rapide, plus léger
Java Message Service
JDBC et Java - Guide du programmeur
Sécurité en Java
Servlets Java - Guide du programmeur
En anglais
Vos avantages ?
n Lisez les dernières nouvelles sur ce qui se
passe dans le monde Tête la première.
n Participez à nos technologies et à nos
ouvrages à paraître.
n Apprenez comment aborder ces sujets
si spéciaux (dites-le trois fois très vite) en
aussi peu de temps que possible.
n Découvrez comment les livres Tête la
première sont créés.
n Rencontrez ceux qui font que tout
baigne dans l’huile...
n Découvrez aussi le site américain à
[Link]
oi
rqu
Pou dre ? ont à
n
atte s web
u r
s [Link]
e .
serv ’écoute nant !
Nos l t e
z m ain
te
Visi
Java ™
Tête la première
2e édition
Ne serait-ce pas
merveilleux s’il existait un
livre sur Java qui serait plus
excitant que de faire la queue
pour changer sa carte grise ?
Mais ce n’est probablement
qu’un rêve...
Kathy Sierra
Bert Bates
Traduction de
Marie-Cécile Baland
Les programmes figurant dans ce livre ont pour but d’illustrer les sujets traités. Il n’est donné aucune garantie quant à leur
fonctionnement une fois compilés, assemblés ou interprétés dans le cadre d’une utilisation professionnelle ou commerciale.
Toute représentation ou reproduction, intégrale ou partielle, faite sans le consentement de l’auteur, de ses ayants droit, ou
ayants cause, est illicite (loi du 11 mars 1957, alinéa 1er de l’article 40). Cette représentation ou reproduction, par quelque
procédé que ce soit, constituerait une contrefaçon sanctionnée par les articles 425 et suivants du Code pénal. La loi du
11 mars 1957 autorise uniquement, aux termes des alinéas 2 et 3 de l’article 41, les copies ou reproductions strictement
réservées à l’usage privé du copiste et non destinées à une utilisation collective d’une part et, d’autre part, les analyses et les
courtes citations dans un but d’exemple et d’illustration.
À nos cerveaux, toujours à notre disposition.
Enfin plus ou moins ...
Les auteurs de Java — Tête la première
Kathy Sierra
Bert Bates
Kathy et Bert essaient de répondre à tous les courriels qu’ils reçoivent, mais le volume de ceux-ci et leurs nombreux
déplacements leur rendent la tâche difficile. La meilleure façon (et la plus rapide) d’obtenir une aide technique est de
consulter le très actif forum des débutants en Java sur le site [Link].
Table des matières (résumé)
Intro xix
1 Jetons nous à l’eau : on pique une tête 1
2 Voyage à Objectville : oui, il y aura des objets 27
3 Maîtrisez vos variables : types primitifs et références 49
4 Le comportement des objets : l’état des objets affecte le comportement des méthodes 71
5 Méthodes extra-fortes : contrôle de flots, opérations et autres 95
6 Utiliser la bibliothèque Java : pour éviter de tout écrire vous-même 125
7 Mieux vivre à Objectville : planifier l’avenir 165
8 Le polymorphisme dans tous ses états : interfaces et classes abstraites 197
9 Vie et mort d’un objet : constructeurs et gestion de la mémoire 235
10 Affaires de nombres : math, formatage, classes, enveloppes et static 273
11 Comportements à risque : gestion des exceptions 315
12 Une histoire très graphique : IHM, gestion des événements et classes internes 353
13 Travaillez votre Swing : gestionnaires d’agencement et composants 399
14 Sauvegarder les objets : sérialisation et E/S 429
15 Établir une connexion : sockets et threads 471
16 Structures de données : collections et génériques 529
16 Déployez votre code : packages et déploiement 581
17 Informatique distribuée : RMI plus une touche de servlets, d’EJB et de Jini 607
A Annexe A : Recettes de code 649
B Annexe B : Dix notions importantes qui ne rentraient pas dans le reste du livre 659
Index 677
i Intro
Votre cerveau et Java. Voilà que vous essayez d’apprendre quelque chose tandis
que votre cerveau fait tout ce qu’il peut pour vous empêcher de mémoriser. Votre cerveau
pense « Mieux vaut laisser de la place pour les choses vraiment importantes, comme savoir
quels sont les animaux sauvages qu’il vaut mieux éviter ou se rendre compte que faire du
snowboard en maillot de bain n’est pas une bonne idée ». Mais comment procéder pour lui
faire croire que votre vie dépend de vos connaissances en Java ?
À qui s’adresse ce livre ? xxii
Ce que pense votre cerveau xxiii
Métacognition xxv
Soumettez votre cerveau xxvii
De quoi avez-vous besoin xxviii
Éditeurs techniques xxx
Remerciements xxxi
ix
1 Jetons-nous à l’eau
Java vous emmène ailleurs. Depuis l’humble révélation au public de la version
1.02, Java a séduit les programmeurs par sa syntaxe conviviale, ses caractéristiques orientées
objet, sa gestion de la mémoire, et, surtout, sa promesse de portabilité. Nous allons piquer une
tête, écrire du code et le compiler. Nous parlerons de syntaxe, de boucles, de branchements et
de ce qui rend Java si génial. Plongez.
2 Voyage à Objectville
On avait dit qu’il y aurait des objets. Au chapitre 1, nous avons placé tout
notre code dans la méthode main(), ce qui n’est pas précisément orienté objet. Il nous faut
maintenant laisser le monde procédural derrière nous et commencer à créer nos propres
objets. Nous verrons ce qui rend le développement orienté objet (OO) en Java si amusant.
Nous étudierons la différence entre une classe et un objet. Et nous verrons comment les
objets peuvent vous changer la vie.
3 Maîtrisez vos variables
Il existe deux sortes de variables : les types primitifs et les
références. Il y a autre chose dans la vie que des entiers, par exemple des chaînes de
caractères et des tableaux. Que se passe-t-il si vous avez un objet Maître avec une variable
d’instance Chien ? Ou une Voiture avec un Moteur ? Dans ce chapitre, nous dévoilerons les
mystères des types Java et nous verrons ce que vous pouvez déclarer comme une variable,
ce que vous pouvez placer dans une variable et ce que vous pouvez faire avec. Et nous ver-
rons enfin à quoi ressemble la vie des objets sur le tas et comment fonctionne le ramasse-
miettes.
passage par valeur = Les méthodes utilisent l’état des objets (aboyez autrement) 73
Arguments et types de retour 74
passage par copie Passage par valeur (la variable est toujours copiée) 77
Méthodes get et set 78
copie de
x Encapsulation (faites-le ou vous risquez d’être humilié) 80
11 0 111
01 00 Utiliser des références dans un tableau 83
00 00
00 Exercices et jeux 88
X Z
int int
[Link](x); void go(int z){ }
xi
5 Méthodes extra-fortes
Musclons un peu nos méthodes. Nous avons taquiné les variables, joué
avec quelques objets et écrit des fragments de code. Maintenant il nous faut des outils. Par
exemple des opérateurs. Et des boucles. Il pourrait être utile de générer des nombres
aléatoires. Et de convertir un String en int. Oui, ce serait génial. Et pourquoi ne pas
apprendre tout cela en construisant quelque chose de réel, pour voir comment on écrit (et
on teste) un programme de toutes pièces. Peut-être un jeu, Comme couler un PointCom
ire un
s constru Com.
(une sorte de bataille navale).
N o u s a ll o n
r un Point
jeu : Coule Construire un jeu : Couler un PointCom 96
A Commençons par SimplePointCom (version simplifiée) 98
B Écrire le pseudocode du jeu 100
[Link]
xii
7 Mieux vivre à Objectville
Planifiez vos programmes en pensant à l’avenir. Et si vous pouviez écrire
du code que quelqu’un d’autre puisse étendre facilement ? Et si ce code était suffisamment
souple pour autoriser ces satanés changements de spécifications de dernière minute ? Quand
vous aurez adhéré au Plan Polymorphisme, vous apprendrez les 5 étapes pour mieux concevoir
vos classes, les 3 clés du polymorphisme, les 8 façons d’apporter de la souplesse à votre code, et, si
vous répondez maintenant : 4 astuces en cadeau pour exploiter l’héritage.
Attention,
passage Comprendre l’héritage (relations superclasse/sous-classes) 168
par valeur
Concevoir une hiérarchie d’héritage (la simulation Animal ) 170
Aide-mémoire threads
attendre()
Laver
le chat Éviter le code dupliqué grâce à l’héritage
Redéfinir les méthodes
171
172
notifier()
Les roses so
nt rouges, m EST-UN et A-UN 177
Carré est-un ets ton chap
e Forme, le eau. Qu’hérite-t-on de la superclasse ? 180
contraire es
Les roses so t faux.
nt rouges, de Qu’apporte réellement l’héritage ? 182
Bière étend m ai n n’est pas hi
Boisson, Bo er. Polymorphisme (utiliser une référence au supertype sur un
isson n’éten
À votre tou d pas Bière objet d’une sous-classe) 183
r. Écrivez u .
l’unidirec ti n texte qui
onnalité de montre Règles de la redéfinition (arguments et types de retour intouchables !) 190
N’oubliez p la relation
as que si X EST-UN.
X EST-UN Y étend Y, Surcharge des méthodes (réutilisation des noms) 191
doit avoir u
n sens.
Exercices et jeux 192
8
Le polymorphisme dans tous ses états
L’héritage n’est qu’un début. Pour exploiter le polymorphisme, il nous faut des
interfaces. Pour dépasser le simple héritage et acquérir de la souplesse, nous devons concevoir
et coder des interfaces. Mais qu’est-ce qu’une interface ? Une classe 100 % abstraite. Et qu’est-ce
qu’une classe abstraite ? Une classe qui ne peut pas être instanciée. Et à quoi sert-elle ? Lisez ce
chapitre… Certaines classes ne doivent pas être instanciées 200
Classes abstraites (non instanciables) 201
Object o = [Link](id); Méthodes abstraites (doivent être implémentées) 203
Chien c = (Chien) o; Le polymorphisme en action 206
[Link](); La classe Object (la superclasse ultime) 208
Extraire des objets d’une ArrayList (ils sont de type Object) 211
Object
Le compilateur vérifie le type de la référence
Ob (avant de vous laisser appeler une méthode) 213
jet Chien
o Entrez en contact avec votre objet intérieur 214
Références polymorphes 215
Object Reconve
d Object ertir l'objet Transtyper une référence (descendre l’arbre d’héritage) 216
xiii
9 Vie et mort d’un objet
Les objets vivent et les objets meurent. Vous en êtes responsable. C’est
vous qui décidez quand et comment les construire. Et quand les abandonner. Le Ramasse-
miettes récupère la mémoire. Nous verrons comment les objets sont créés, où ils résident et
comment les conserver ou les abandonner de manière efficace. Nous parlerons donc du tas,
de la pile, de la visibilité, des constructeurs, des super-constructeurs, des références nulles
et de l’égilibilité au ramasse-miettes.
lle la méthode
Quand on appe est abandonné. La pile et le tas, lieux de résidence des objets et des variables 236
go(), ce canard nce a été
Sa seule référepour un nouveau
Les méthodes vivent sur la pile 237
jet Cana
Constructeurs (le code qui s’exécute quand vous écrivez new) 241
c Initialiser l’état d’un nouveau Canard 243
jet Cana
Constructeurs de la superclasse (chaînage des constructeurs) 250
Canard et
“c" se voit affecter un nouvel objet premier
Invoquer des constructeurs surchargés avec this() 256
le Canard d'origine est abandonné. Ce Vie d’un objet 258
Canard est grillé... Ramasse-miettes (et libération de la mémoire) 260
Exercices et jeux 266
1
meuh(); explode();
} }
}
appelle une
}
[Link]();
}
}
méthode risquée Le bloc finally (quoi qu’il arrive, éteindre le four !) 327
votre code classe avec
Intercepter plusieurs exceptions (l’ordre compte) 329
méthode
risquée Déclarer une exception (l’esquiver) 335
Gérer ou déclarer, telle est la loi 337
Recettes de code (créer des sons) 339
Exercices et jeux 348
r
intimement liés. exte Afficher plusieurs boutons à l’écran 367
t
ts sur le tas on interne Les classes internes à la rescousse 376
Ces deux obje ivilégiée. L'objet
une relation pr iliser les variables
Animation (dessiner, déplacer, dessiner, déplacer, dessiner...) 382
interne peut utrne et inversement. Recettes de code (dessiner au rythme de la musique) 386
de l'objet exte Exercices et jeux 394
xv
13 Travaillez votre Swing
Swing est facile. Tant que vous n’attachez pas trop d’importance au placement des
objets. Le code Swing a l’air simple, mais compilez-le, exécutez-le, regardez le résultat et
vous penserez « Hé, ce n’est pas ce que j’avais prévu ». Ce qui facilite le codage est aussi ce qui
rend le contrôle difficile — le gestionnaire d’agencement. Mais avec un peu de travail,
les gestionnaires d’agencement se soumettront à votre volonté. Dans ce chapitre, vous
travaillerez votre Swing et vous en apprendrez plus sur les widgets.
xvi
15 Établir une connexion
Connectez-vous au monde extérieur. C’est facile. Tous les détails de bas
niveau du réseau sont pris en charge par les classes de la bibliothèque [Link]. L’une des
caractéristiques de Java est que l’émission et la réception de données sur un réseau se
résume à des opérations d’E/S avec un flot de connexion légèrement différent en bout de
chaîne. Dans ce chapitre, nous créerons des sockets client et des sockets serveur. À la fin du
chapitre, nous disposerons d’un client de discussion multithread pleinement fonctionnel.
Avons nous-dit multithread ?
Connexion so
port 5000 cket au
serveur à l'a sur le Aperçu du programme de discussion 473
[Link] dresse Se connecter, émettre et recevoir 474
3
Sockets réseau 475
Ports TCP 476
Lire des données dans une socket (avec BufferedReader) 478
Écrire des données dans une socket (avec PrintWriter) 479
Client Serveur
Conseil du jour : le code du client 480
Connexion s le
r
socket ve dresse Écrire un serveur simple 483
t à l' a
clien 00, port Conseil du jour : le code du serveur 484
[Link]
4242 Écrire un client de discussion 486
Piles d’appels multiples 490
Lancer un nouveau thread (création et démarrage) 492
L’interface Runnable (la tâche du thread) 494
Les trois états d’un nouvel objet Thread 495
Ordre d’exécution des threads 496
L’ordonnanceur de threads (c’est lui qui prend les décisions) 497
Mettre un thread en sommeil 501
Créer et lancer deux threads 503
Accès concurrents : ce couple peut-il être sauvé ? 505
Le problème des accès concurrents : Sylvie et Bruno 506
Verrouillage et atomicité 510
Tout objet possède un verrou 511
Le problème des mises à jour perdues 512
Méthodes synchronisées (avec un verrou) 514
Verrou mortel ! 516
Le code du client de discussion multithread 518
Code prêt à l’emploi : le serveur de discussion 520
Exercices et jeux 524
xvii
16 Structures de données
Le tri est un jeu d’enfant en Java. Vous disposez de tous les outils qui permettent
de collecter et de manipuler vos données sans devoir écrire vos propres algorithmes de tri.
Le framework Java Collections a des structures de données qui doivent fonctionner pour
pratiquement tout ce que vous aurez jamais besoin de faire. Vous voulez une liste dans laquelle
il est facile d’ajouter des éléments ? Vous voulez trouver un élément par son nom ? Vous voulez
créer une liste qui élimine automatiquement tous les doublons ? Ou encore trier vos collègues de
travail selon le nombre de fois qu’ils vous ont tapé dans le dos ?
Collections 533
Trier une ArrayList avec [Link]() 534
List 0 1 2 3 Génériques et fiabilité du type 540
Généricité et typage 540
Trier des objets qui implémentent l’interface Comparable 547
Trier des objets avec un Comparateur personnalisé 552
Set L’API des collections : List, Set et Map 557
Éviter les doublons avec HashSet 559
Redéfinir les méthodes hashCode() et equals() 560
HashMap 567
Map “Balle1”
“Ball” “Fish”
“Balle2” “Car”
“Poison” “Auto”
Utiliser des jokers pour le polymorphisme 574
Exercices et jeux 576
xviii
17 Déployez votre code
Il est temps de lâcher prise. Vous avez écrit votre code. Vous l’avez testé.
Vous l’avez peaufiné. Vous avez dit à tout le monde que vous adoreriez ne plus jamais
voir une ligne de code. Mais vous avez fini par créer un chef d’œuvre. Et en plus il
tourne ! Et maintenant ? Dans les deux derniers chapitres, nous allons voir comment
organiser, packager et déployer votre programme Java. Nous étudierons le déploiement
local, semi-local et distant avec les JAR exécutables, Java Web Start, RMI et les servlets.
classes Décontractez-vous. Certains des aspects les plus puissants de Java sont beaucoup plus
simples que vous ne l’imaginez.
fr
101101
Options de déploiement 582
10 110 1
[Link] foo 0 11 0
001 10
001 01
Séparez le code source des fichiers compilés 584
[Link] Créer un JAR (Java ARchive) exécutable 585
[Link]
Exécuter un JAR 586
Serveur web Placez vos classes dans un package ! 587
JWS
Lorper
iure
eugue
tat vero
Structure de répertoires des packages 589
conse
18
Informatique distribuée
La distance n’est pas nécessairement négative. Bien sûr, tout
est plus facile quand toutes les parties de votre application sont centralisées, avec un
seul tas et une seule JVM pour gérer le tout. Mais ce n’est pas toujours possible. Ni
souhaitable. Que se passe-t-il si votre programme a besoin de beaucoup de puissance
de calcul ? Ou s’il doit accéder aux données d’une base de données sécurisée ? Dans ce
chapitre, nous allons apprendre à utiliser RMI (étonnamment simple). Nous jetterons
également un rapide coup d’œil sur les servlets, les EJB et Jini.
xix
A Annexe A
La version finale du projet BeatBox. Tout le code côté client et côté
serveur. Votre chance de devenir une rock star.
B Annexe B
Les dix sujets importants qui n’entraient pas dans le livre. Nous
ne pouvons pas vous laisser repartir comme ça dans le monde réel. Encore quelques petites
choses et ce sera la fin de ce livre. Cette fois, c’est vrai.
i
Énumérations 671
Index
677
xx