Vous êtes sur la page 1sur 112

L E P R O G R A M M E U R

S&SM S&SM

Toutes les techniques de


la programmation objet avec Java

Conception Web : interactivit et


animation grce aux applets

Toutes les nouvelles fonctions Java :


JDBC, RMI, JavaBeans, etc.
LAURA LEMAY ET CHARLES L. PERKINS
JAVA 1.1
JAVA 1.1
Un CD-ROM
contenant Java
Development Kit
pour Mac et PC
et tous les codes
source du livre
Apprenez
Apprenez
en 21 jours
en 21 jours
LAURA LEMAY ET CHARLES L. PERKINS

Toutes les techniques de


la programmation objet avec Java

Conception Web : interactivit et


animation grce aux applets

Toutes les nouvelles fonctions Java :


JDBC, RMI, JavaBeans, etc.
EN CADEAU !
Un CD-ROM
contenant Java
Development Kit
pour Mac et PC
et tous les codes
source du livre

Laura Lemay
Charles L. Perkins

S&SM
S&SM
Simon & Schuster Macmillan

LE PROGRAMMEUR

Java 1.1

Java Prel Page I lundi 1 dcembre 1997 10:14

Simon & Schuster Macmillan (France) a apport le plus grand soin la ralisation de ce livre an
de vous fournir une information complte et able. Cependant, Simon & Schuster Macmillan
(France) nassume de responsabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou
atteintes aux droits de tierces personnes qui pourraient rsulter de cette utilisation.
Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptions
thoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle.
Le CD-ROM qui accompagne cet ouvrage vous est offert pour vous permettre de mieux mettre en
pratique les exemples du livre. Les programmes prsents sur ce support peuvent ncessiter des adapta-
tions pour fonctionner sur votre matriel.
Simon & Schuster Macmillan (France) ne pourra en aucun cas tre tenu pour responsable des prju-
dices ou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ou
programmes.
Tous les noms de produits ou autres marques cits dans ce livre sont des marques dposes par leurs
propritaires respectifs.

Toute reproduction, mme partielle, par quelque procd que ce soit, est interdite sans autorisation pralable.
Une copie par xrographie, photographie, lm, support magntique ou autre, constitue une contrefaon passible
des peines prvues par la loi, du 11 mars 1957 et du 3 juillet 1995, sur la protection des droits dauteur.

Publi par Simon & Schuster Macmillan
(France)
19, rue Michel Le Comte
75003 PARIS
Tl. : 01 44 54 51 10
Mise en page : TyPAO

ISBN : 2-7440-0297-6
Copyright 1997
Simon & Schuster Macmillan (France)

Tous droits rservs
Titre original :

Teach yourself Java 1.1 in 21 Days

Traduit de lamricain par : Claude Raimond

ISBN original : 1-57521-142-4
Copyright 1997 by Sams.net Publishing

Tous droits rservs
Sams.net est une marque de Macmillan
Computer Publishing
201 West 103rd Street
Indianapolis, Indiana 46290. USA

Java Prel Page II lundi 1 dcembre 1997 10:14

L E P R O G R A M M E U R

SOMMAIRE

Prsentation 1
Introduction 3
1 Introduction la programmation Java 1.1 13
2 Programmation oriente objet et Java 39
3 Les bases de Java 63
4 Travailler avec les objets 83
5 Tableaux, branchements conditionnels et boucles 105
6 Cration des classes et des applications 129
7 Complments sur les mthodes 147
8 Les bases des applets 165
9 Dessin, polices et couleurs 193
10 Animation, images, threads et sons 221
11 Gestion dvnements simples et de linteractivit 259
12 Cration dinterfaces utilisateurs avec AWT 301
13 Cration dinterfaces utilisateurs volues avec AWT 353
14 Rseaux, API volues et complments divers 407
15 Modificateurs 461
16 Packages, interfaces et classes internes 483
17 Exceptions 507
18 Multithreading 527
19 Flux Java et E/S 549
20 Mthodes et bibliothques natives 581
21 Sous le capot 615
A Rsum du langage Java 667
B Diagrammes des hirarchies des classes 675
C Bibliothques de classes Java 703
D Diffrence entre Java, C et C++ 723
E Contenu du CD-ROM 729
Index 733

Java som Page III lundi 1 dcembre 1997 9:57

Table des matires

Java 1.1 IV

Prsentation

Quoi de neuf ?

............................................................

1
Public vis

...................................................................

1
Conventions

................................................................

2

Introduction

Organisation de louvrage

........................................

3
Sites Web pour des informations
complmentaires

........................................................

5
Contenu du CD-ROM

...............................................

6
Logiciels pour Windows

...........................................

6

Java

............................................................................

6

Outils HTML

.............................................................

6

Applications graphiques, vido et son

....................

7

Utilitaires

..................................................................

7
Logiciel pour Macintosh

..........................................

7

Java

............................................................................

7

Outils HTML

.............................................................

7

Utilitaires

..................................................................

8
Le shareware

...............................................................

8
Installation du CD-ROM

..........................................

8

Procdure dinstallation pour Windows 95/NT4

.....

8

Procdure dinstallation pour Windows NT 3.51

....

8

Procdure dinstallation pour Macintosh

..............

9

PARTIE 1 - LE LANGAGE JAVA

1 Introduction la programmation Java 1.1

Java

...............................................................................

14
Java hier, aujourdhui et demain

.............................

16
Pourquoi apprendre Java ?

.......................................

17

Java ne dpend daucune plate-forme

...................

18

Java est orient objet

...............................................

20

Java est facile apprendre

......................................

20
Programmer avec Java

..............................................

21

Acquisition dun environnement
de dveloppement Java

............................................

21

Installation du JDK et des chiers dexemples

.....

22

Conguration du JDK

..............................................

23

Cration dune application Java

............................

24

Cration dune applet Java

.....................................

29
Rsolution des problmes

........................................

33
Rsum

........................................................................

34
Questions rponses

................................................

34

2 Programmation oriente objet et Java

Penser en termes dobjets : lanalogie

...................

40
Objets et classes

.........................................................

41
Attributs et comportement

.......................................

43

Attributs

.....................................................................

43

Comportement

...........................................................

43

Cration dune classe

..............................................

44
Hritage, interfaces et packages

..............................

49

Hritage

.....................................................................

50

Cration dune hirarchie de classes

.....................

51

Fonctionnement de lhritage

.................................

53

Hritage simple ou multiple

....................................

55

Interfaces et packages

..............................................

55
Cration dune sous-classe

.......................................

57
Rsum

........................................................................

60
Questions rponses

.................................................

61

3 Les bases de Java

Instructions et expressions

.......................................

64
Types de donnes et de variables

............................

65

Dclaration des variables

........................................

66

Noms de variables

....................................................

67

Types de variables

....................................................

67

Attribution de valeurs aux variables

......................

69
Commentaires

............................................................

69
Constantes

...................................................................

70

Constantes nombre

...................................................

70

Constantes boolennes

.............................................

70

Constantes caractre

................................................

70

Constantes chane

....................................................

71
Oprateurs et expressions

.........................................

72

Oprateurs arithmtiques

........................................

72

Affectations

...............................................................

74

Incrmentation et dcrmentation

..........................

75

Comparaisons

...........................................................

77

Oprations logiques

.................................................

77

Oprateurs sur les bits

.............................................

78

Hirarchie des oprateurs

.......................................

78
Arithmtique sur les chanes

...................................

80
Rsum

........................................................................

80
Questions rponses

.................................................

82

4 Travailler avec les objets

Cration de nouveaux objets

....................................

84

Oprateur new

..........................................................

84

Oprations ralises par new

..................................

86

Java TDM Page IV lundi 1 dcembre 1997 9:59

Table des matires

V

L E P R O G R A M M E U R

Gestion de la mmoire

.............................................

86
Variables dinstance et de classe :
accs, xation dune valeur

.....................................

87

Accs aux valeurs

.....................................................

87

Mise jour des valeurs

............................................

87

Variables de classe

...................................................

88
Appel des mthodes

..................................................

89

Mthodes de classe

...................................................

91
Rfrences aux objets

...............................................

92
Conversion de types
de donnes primaires et dobjets

............................

93

Conversion des types primaires

..............................

94

Conversion des objets

..............................................

94

Transformation de types primaires en objets
et vice versa

..............................................................

95
Complments divers

..................................................

96

Comparaison des objets

...........................................

96

Identication de la classe dun objet

......................

98
Inspection des classes et des mthodes
par la rexion

...........................................................

99
Bibliothque de classes Java

.................................... 101
Rsum ........................................................................ 102
Questions rponses ................................................ 102
5 Tableaux, branchements conditionnels et boucles
Tableaux ...................................................................... 106
Dclaration des variables tableau .......................... 106
Cration des objets tableau ..................................... 107
Accs aux lments de tableaux .............................. 108
Mise jour des lments de tableaux ..................... 108
Tableaux multidimensionnels .................................. 111
Blocs dinstructions .................................................. 111
Branchement conditionnel if ................................... 112
Oprateur conditionnel ............................................ 114
Branchement conditionnel switch .......................... 115
Boucles for .................................................................. 118
Boucles while et do ................................................... 120
Boucles while ............................................................ 120
Boucles do...while .................................................... 122
Sortir des boucles ...................................................... 123
Boucles avec tiquettes ............................................ 124
Rsum ........................................................................ 125
Questions rponses ................................................ 126
6 Cration des classes et des applications
Dnition des classes ................................................ 130
Cration de variables dinstance
et de variables de classe ............................................ 131
Dnition des variables dinstance ........................ 131
Constantes ................................................................. 132
Variables de classe ................................................... 133
Cration de mthodes ................................................ 133
Dnition des mthodes ........................................... 133
Le mot cl this ........................................................... 135
Porte des variables et dnition des mthodes .... 136
Passage darguments des mthodes .................... 137
Mthodes de classe ................................................... 139
Cration dapplications Java .................................... 140
Classes auxiliaires .................................................... 141
Applications Java et arguments
en ligne de commande .............................................. 141
Passage des arguments des programmes Java ... 141
Traitement des arguments
dans un programme Java ......................................... 142
Rsum ........................................................................ 144
Questions rponses ................................................. 145
7 Complments sur les mthodes
Cration de mthodes ayant le mme nom
et des arguments diffrents ...................................... 148
Mthodes constructeurs ............................................ 152
Constructeurs de base .............................................. 153
Appel dun autre constructeur ................................. 154
Surcharge des constructeurs ................................... 154
Rdnition de mthodes ......................................... 156
Cration de mthodes rednissant
des mthodes existantes ........................................... 156
Appel de la mthode dorigine ................................ 158
Rednition de constructeurs .................................. 159
Mthodes de terminaison ......................................... 161
Rsum ........................................................................ 162
Questions rponses ................................................. 162
PARTIE 2 - DVELOPPEMENT DAPPLETS
8 Les bases des applets
Diffrences entre applets et applications ............... 166
Applets 1.02 et 1.1 ..................................................... 168
Cration dapplets ...................................................... 169
Principales activits des applets .............................. 170
Java TDM Page V lundi 1 dcembre 1997 9:59
Table des matires
Java 1.1 VI
Initialisation .............................................................. 170
Dmarrage ................................................................ 171
Arrt ........................................................................... 171
Destruction ................................................................ 171
Peinture ..................................................................... 172
Une applet simple ...................................................... 172
Inclusion dune applet dans une page Web ........... 174
La balise <APPLET> .............................................. 174
Test du rsultat .......................................................... 175
Publication dapplets Java sur le Web ................... 175
Complments sur la balise <APPLET> ................ 176
ALIGN ....................................................................... 176
HSPACE et VSPACE ................................................ 178
CODE et CODEBASE ............................................. 179
Archives Java .............................................................. 179
Autres formats darchivage ..................................... 180
Identication dapplets
par des signatures numriques ................................ 182
Passation de paramtres des applets ................... 184
Rsum ........................................................................ 189
Questions rponses ................................................ 190
9 Dessin, polices et couleurs
La classe Graphics .................................................... 194
Systme de coordonnes graphiques ...................... 195
Dessin et remplissage ............................................... 196
Lignes ........................................................................ 196
Rectangles ................................................................. 197
Polygones .................................................................. 198
Ovales ........................................................................ 201
Arcs ............................................................................ 202
Un exemple simple de dessin ................................... 206
Copie et effacement .................................................. 207
Texte et polices de caractres .................................. 208
Cration dobjets Font ............................................. 208
Dessin de caractres et de chanes .......................... 209
Obtention dinformations sur une police
de caractres ............................................................. 211
Couleur ........................................................................ 213
Objets Color .............................................................. 214
Test et xation des couleurs courantes ................... 215
Un exemple simple de couleurs ............................... 215
Couleurs systme standard ...................................... 217
Rsum ........................................................................ 218
Questions rponses ................................................ 219
10 Animation, images, threads et sons
Cration danimations en Java ................................ 222
Peindre et repeindre ................................................. 223
Dmarrage et arrt de lexcution dune applet ... 223
Un chanon manquant : les threads ........................ 224
Ecriture dapplets avec des threads ........................ 225
Mise en uvre ........................................................... 227
Rduction du clignotement de lanimation ........... 229
Le clignotement, et comment lviter ...................... 230
Rednition dupdate() ............................................ 230
Premire solution : pas deffacement de lcran ... 231
Rcupration et utilisation dimages ...................... 233
Obtention dimages .................................................. 233
Dessin des images .................................................... 235
Note sur les observateurs dimages ........................ 237
Modication dimages ............................................. 238
Cration danimations base dimages ................. 238
Un exemple : Neko ................................................... 238
Etape 1 : rassemblement des images ...................... 239
Etape 2 : organisation et chargement
des images de lapplet .............................................. 239
Etape 3 : animation des images .............................. 240
Etape 4 : nition ....................................................... 244
Rcupration et utilisation des sons ....................... 247
Complment sur le clignotement :
le double buffer .......................................................... 250
Cration dapplets avec double buffer ................... 250
Note sur llimination des contextes Graphics ...... 251
Un exemple : le jeu de dames .................................. 252
Rsum ........................................................................ 256
Questions rponses ................................................. 256
11 Gestion dvnements simples et de linteractivit
Une thorie unie des vnements ....................... 260
En quoi consistent les vnements ? ....................... 260
Les deux modles dvnement ............................... 261
Quel modle utiliser ? .............................................. 262
Traitement des clics de souris
dans le modle 1.02 ................................................... 263
Evnements souris en bas et souris en haut ........... 263
Un exemple : Spots ................................................... 265
Doubles clics ............................................................. 268
Traitement des mouvements de souris
dans le modle 1.02 ................................................... 268
Evnements glissement de souris
et mouvement de souris ............................................ 269
Java TDM Page VI lundi 1 dcembre 1997 9:59
Table des matires
VII
L E P R O G R A M M E U R
Evnements entre souris et sortie souris .............. 269
Un exemple : dessin de lignes ................................. 270
Traitement des vnements clavier
dans le modle dvnements 1.02 ......................... 274
Les mthodes keyDown() et keyUp() ...................... 274
Touches standard ...................................................... 275
Un exemple : entre, afchage
et dplacement de caractres .................................. 276
Test des touches de modication
et des boutons de souris multiples .......................... 279
Gestionnaire dvnement gnrique 1.02 :
handleEvent() ............................................................. 281
Passage au modle dvnement 1.1 ...................... 283
Quest-ce qui ne va pas dans lancien modle ? ... 283
Fonctionnement du nouveau modle ...................... 284
Le modle dvnement 1.1 .................................... 286
Etape 1 : dtermination des vnements
mis en uvre par lapplet ........................................ 286
Etape 2 : implmentation de linterface ................. 287
Etape 3 : enregistrement de lcouteur .................. 289
Conversion de code dvnement 1.02 en 1.1 ....... 291
Un exemple : conversion de Lines .......................... 291
Evnements souris et clavier
dans le modle dvnements 1.1 ........................... 295
Clics de souris et mouvements de souris ................ 295
Appuis sur les touches .............................................. 296
Rsum ........................................................................ 297
Questions rponses ................................................ 298
12 Cration dinterfaces utilisateurs avec AWT
Vue densemble dAWT ........................................... 302
Composants de base de linterface utilisateur ...... 304
Adjonction de composants une applet ................. 305
Etiquettes ................................................................... 305
Boutons ...................................................................... 307
Cases cocher .......................................................... 308
Boutons radio ........................................................... 310
Menus de slection ................................................... 311
Champs de texte ........................................................ 313
Panneaux et mise en page ........................................ 315
Gestionnaires de mise en page : vue densemble .. 316
La classe FlowLayout .............................................. 316
Mise en page du type grille (GridLayout) .............. 318
Mises en page du type BorderLayout ..................... 319
Mises en page du type cartes (CardLayout) .......... 321
Mises en page du type GridBagLayout .................. 321
Retraits (insets) ......................................................... 332
Focalisation entre (input focus)
et exploitation sans souris (1.1 seulement) ........... 333
Traitement des vnements dinterface utilisateur
dans le modle 1.02 ................................................... 334
Traitement des vnements daction ....................... 335
Traitement des autres vnements .......................... 337
Traitement des vnements dinterface utilisateur
dans le modle dvnements 1.1 ........................... 338
Ecouteurs des composants de base de linterface... 338
Enregistrement des couteurs
de composants dinterface utilisateur .................... 339
Diffrences entre les vnements 1.02 et 1.1 ......... 340
Exemple : commutateur de couleur
darrire-plan .............................................................. 341
Ajout du code des vnements (1.02) ..................... 342
Ajout du code des vnements (1.1) ........................ 344
Rsum ........................................................................ 349
Questions rponses ................................................. 349
13 Cration dinterfaces utilisateurs volues avec AWT
Imbrication de composants ...................................... 354
Panneaux imbriqus ................................................. 354
Panneaux imbriqus dans le modle
dvnements 1.02 .................................................... 355
Autres composants dinterface utilisateur ............. 356
Zones de texte ........................................................... 356
Listes dlement .................................................... 358
Barres de dlement et glissires ............................ 361
Carreaux dlement (1.1 seulement) ................... 365
Canevas ..................................................................... 366
Curseurs .................................................................... 367
Jouer avec les composants ....................................... 368
Un exemple complet :
convertisseur de RGB HSB .................................. 370
Conception et cration de la mise en page
de lapplet ................................................................. 371
Dnition des sous-panneaux .................................. 373
Traitement des vnements ...................................... 376
Mise jour du rsultat ............................................. 377
Le code source complet ............................................ 380
Fentres, cadres et botes de dialogue .................... 383
Les classes Window dAWT ..................................... 383
Cadres ........................................................................ 384
Botes de dialogue .................................................... 388
Curseurs (1.02 seulement) ....................................... 393
Evnements de fentre .............................................. 394
Java TDM Page VII lundi 1 dcembre 1997 9:59
Table des matires
Java 1.1 VIII
Les menus ................................................................... 395
Menus et barres de menu ......................................... 396
Articles de menu ....................................................... 397
Un exemple : une fentre popup avec des menus.... 400
Cration dapplications AWT autonomes ............. 403
Rsum ........................................................................ 404
Questions rponses ................................................ 405
14 Rseaux, API volues et complments divers
Divers procds concernant les applets ................. 408
Mthode showStatus() .............................................. 408
Informations sur lapplet ......................................... 409
Cration de liens lintrieur dapplets ................ 409
Communication entre applets .................................. 412
Les rseaux en Java ................................................... 413
Ouverture de connexions sur le Web ...................... 414
Sockets ....................................................................... 418
Trivia : un socket simple client/serveur ................. 420
Conception de Trivia ................................................ 420
Implmentation du serveur Trivia ........................... 421
Implmentation du client Trivia .............................. 427
Excution de Trivia .................................................. 428
Impression (Java 1.1) ................................................ 429
Couper, copier et coller (1.1 seulement) ............... 431
Cration dobjets transfrables .............................. 432
Le Presse-papiers ..................................................... 433
Internationalisation (Java 1.1) ................................. 437
Utilisation de locales ............................................... 437
Formatage international des donnes .................... 439
Pour aller plus loin .................................................. 442
Fonctions avances de Java 1.1 ............................... 442
JavaBeans ................................................................. 443
Scurit ...................................................................... 449
RMI (Remote Method Invocation) .......................... 450
JDBC (Java Database Connectivity) ..................... 453
Rsum ........................................................................ 454
Questions rponses ................................................ 455
PARTIE 3 - INFORMATIONS AVANCES
15 Modificateurs
Les modicateurs ...................................................... 462
Contrle daccs aux mthodes et aux variables... 464
Raisons de limportance du contrle daccs ........ 464
Les quatre p de la protection ................................... 465
Protection des mthodes et hritage ....................... 470
Protection des variables dinstance
et mthodes daccs .................................................. 470
Variables et mthodes de classe .............................. 473
Finalisation de classes, de mthodes
et de variables ............................................................. 475
Finalisation de classes ............................................. 476
Finalisation de variables ......................................... 476
Finalisation de mthodes ......................................... 477
Classes et mthodes abstraites ................................ 478
Rsum ........................................................................ 480
Questions rponses ................................................. 480
16 Packages, interfaces et classes internes
La programmation en grand
et la programmation en petit .................................... 484
Prsentation des packages ........................................ 485
Utilisation des packages ........................................... 486
Noms complets de classes et de packages .............. 487
La commande import ............................................... 487
Conits sur les noms ................................................ 488
Note sur CLASSPATH et lemplacement
des classes ................................................................. 488
Cration de vos propres packages .......................... 489
Choix dun nom de package .................................... 489
Cration de la structure de rpertoire .................... 490
Utilisation de package pour ajouter
une classe un package .......................................... 490
Packages et protection des classes ......................... 490
Prsentation des interfaces ? .................................... 493
Le problme de lhritage unique ........................... 493
Conception abstraite et implmentation concrte... 495
Interfaces et classes .................................................. 496
Implmentation et utilisation des interfaces ......... 496
Mot cl implements ................................................... 496
Implmentation dinterfaces multiples ................... 498
Autres utilisations des interfaces ............................ 498
Cration et extension des interfaces ....................... 499
Nouvelles interfaces ................................................. 500
Mthodes lintrieur des interfaces ..................... 501
Extension des interfaces .......................................... 501
Un exemple : numration de listes lies ............... 502
Classes internes .......................................................... 504
Rsum ........................................................................ 505
Questions rponses ................................................. 505
Java TDM Page VIII lundi 1 dcembre 1997 9:59
Table des matires
IX
L E P R O G R A M M E U R
17 Exceptions
Exceptions, la manire traditionnelle,
source de confusions ................................................. 508
Exceptions Java .......................................................... 509
Gestion des exceptions ............................................. 511
Vrication de cohrence en matire dexception 511
Protection du code et capture des exceptions ........ 512
La clause Finally ...................................................... 515
Dclaration de mthodes susceptibles
de lever des exceptions ............................................. 516
La clause throws ....................................................... 516
Quelles exceptions lever ? ....................................... 517
Le passage des exceptions ....................................... 518
throws et lhritage .................................................. 518
Cration et levage de vos propres exceptions ....... 519
Levage des exceptions .............................................. 519
Cration des exceptions ........................................... 520
Combinaison de throws, try et throw ...................... 521
Quand utiliser des exceptions
et quand sen abstenir ............................................... 521
Quand utiliser les exceptions .................................. 521
Exceptions lusage des exceptions ....................... 522
Du mauvais got en matire dexceptions ............. 522
Rsum ........................................................................ 523
Questions rponses ................................................ 524
18 Multithreading
Les bases des threads ................................................ 528
Problme de paralllisme ......................................... 529
Penser en termes de multithread ............................. 530
A propos des points .................................................. 532
Protger une variable de classe .............................. 534
Cration et utilisation des threads .......................... 535
Interface Runnable ................................................... 536
Savoir quand un thread sarrte .............................. 540
Planication des threads ........................................... 541
Planication premptive et non premptive .......... 541
Test du programmateur ............................................ 542
Rsum ........................................................................ 546
Questions rponses ................................................ 546
19 Flux Java et E/S
Flux dentre (input streams) et lecteurs (readers) 551
Les classes abstraites InputStream et Reader ....... 551
FileInputStream et FileReader ................................ 557
PipedInputStream et PipedReader .......................... 566
Sequence InputStream .............................................. 566
StringBufferInputStream et StringReader .............. 567
Output Streams et Writers ........................................ 567
Les classes abstraites OutputStream et Writer ...... 567
ByteArrayOutputStream et CharArrayWriter ........ 569
FileOutputStream et FileWriter .............................. 571
FilterOutputStream et FilterWriter ......................... 571
BufferedOutputStream et BufferedWriter ............... 572
PipedOutputStream et PipedWriter ........................ 577
Classes apparentes ................................................... 577
Rsum ........................................................................ 578
Questions rponses ................................................. 579
20 Mthodes et bibliothques natives
Inconvnients des mthodes natives ....................... 582
Une efcacit illusoire .............................................. 583
Optimisations intgres ........................................... 585
Astuces simples doptimisation ............................... 586
Ecrire des mthodes native ...................................... 587
Classe exemple ......................................................... 587
Gnration de chiers den-tte .............................. 589
Cration de SimpleFile.c ......................................... 591
Bibliothque native .................................................... 594
Tout lier ..................................................................... 594
Utiliser la bibliothque ............................................ 594
Interface native Java (JNI) ....................................... 594
Ce que fait JNI .......................................................... 595
Pourquoi JNI a t cr ........................................... 596
Comment marche JNI ............................................... 596
Les fonctions JNI en dtail ...................................... 602
LAPI dinvocation ................................................... 611
Rsum ........................................................................ 613
Questions rponses ................................................. 614
21 Sous le capot
Un avenir prometteur ................................................ 616
Une vision puissante ................................................. 617
La machine virtuelle Java ......................................... 618
Vue densemble ......................................................... 619
Les parties fondamentales ....................................... 620
Le pool de constantes ............................................... 624
Les pseudo-codes en dtail ...................................... 625
Linterprteur de pseudo-code ................................ 625
Compilateurs en temps rel ..................................... 625
Le traducteur java2c ................................................ 626
Les pseudo-codes ...................................................... 627
Java TDM Page IX lundi 1 dcembre 1997 9:59
Table des matires
Java 1.1 X
Le format de chier .class ........................................ 646
Les limitations ............................................................ 649
Les descripteurs de mthodes .................................. 649
Le programme de rcupration de mmoire ......... 650
Le problme .............................................................. 651
La solution ................................................................ 651
Le rcuprateur de mmoire parallle de Java ..... 654
La question de scurit ............................................. 654
Pourquoi sinquiter ? ............................................. 654
Pourquoi il ne faut pas sinquiter ......................... 654
Le modle de scurit de Java ................................ 655
Rsum ........................................................................ 663
Questions rponses ................................................ 663
PARTIE 4 - ANNEXES
A Rsum du langage Java
Mots rservs ............................................................. 668
Commentaires ............................................................ 668
Constantes ................................................................... 669
Dclaration de variable ............................................. 669
Affectation de variable ............................................. 670
Oprateurs ................................................................... 670
Objets ........................................................................... 671
Tableaux ...................................................................... 672
Boucles et branchements conditionnels ................ 672
Dnitions de classe ................................................. 673
Dnitions de mthode et de constructeur ............ 673
Packages, interfaces et importation ........................ 674
Exceptions et mise en garde .................................... 674
B Diagrammes des hirarchies des classes
C Bibliothques de classes Java
java.lang ...................................................................... 704
Interfaces ................................................................... 704
Classes ....................................................................... 704
java.lang.reect (Java 1.1) ....................................... 705
Interfaces ................................................................... 705
Classes ....................................................................... 705
java.math (Java 1.1) ................................................... 705
Classes ....................................................................... 705
java.util ........................................................................ 706
Interfaces ................................................................... 706
Classes ....................................................................... 706
Java.util.zip (Java 1.1) ............................................... 707
Interfaces ................................................................... 707
Classes ....................................................................... 707
java.io ........................................................................... 707
Interfaces ................................................................... 707
Classes ....................................................................... 708
java.net ......................................................................... 709
Interfaces ................................................................... 709
Classes ....................................................................... 710
java.awt ........................................................................ 710
Interfaces ................................................................... 710
java.awt.datatransfer (Java 1.1) ............................... 712
Interfaces ................................................................... 712
Classes ....................................................................... 713
java.awt.event (Java 1.1) ........................................... 713
Interfaces ................................................................... 713
Classes ....................................................................... 713
java.awt.image ............................................................ 714
Interfaces ................................................................... 714
Classes ....................................................................... 714
java.awt.peer ............................................................... 715
java.applet ................................................................... 715
Interfaces ................................................................... 715
Classes ....................................................................... 715
java.beans .................................................................... 716
Interfaces ................................................................... 716
Classes ....................................................................... 716
java.rmi ........................................................................ 717
Interfaces ................................................................... 717
Classes ....................................................................... 717
java.rmi.dgc ................................................................ 717
Interfaces ................................................................... 717
Classes ....................................................................... 718
java.rmi.registry ......................................................... 718
Interfaces ................................................................... 718
Classes ....................................................................... 718
java.rmi.server ............................................................ 718
Interfaces ................................................................... 718
Classes ....................................................................... 719
java.security ................................................................ 719
Interfaces ................................................................... 719
Classes ....................................................................... 719
java.security.acl .......................................................... 720
Interfaces ................................................................... 720
java.security.interfaces .............................................. 721
Java TDM Page X lundi 1 dcembre 1997 9:59
Table des matires
XI
L E P R O G R A M M E U R
Interfaces ................................................................... 721
java.sql ......................................................................... 721
Interfaces ................................................................... 721
Classes ....................................................................... 721
java.text ....................................................................... 722
Interfaces ................................................................... 722
Classes ....................................................................... 722
D Diffrence entre Java, C et C++
Pointeurs ...................................................................... 724
Tableaux ...................................................................... 724
Chanes ........................................................................ 725
Gestion de mmoire .................................................. 725
Types de donnes ....................................................... 725
Oprateurs ................................................................... 726
Commande .................................................................. 726
Arguments ................................................................... 726
Autres diffrences ...................................................... 727
E Contenu du CD-ROM
Logiciels pour Windows ........................................... 730
Java ............................................................................ 730
Outils HTML ............................................................. 730
Applications graphiques, vido et son .................... 731
Utilitaires .................................................................. 731
Logiciels pour Macintosh ........................................ 731
Java ............................................................................ 731
Outils HTML ............................................................. 731
Logiciels graphiques ................................................ 732
Utilitaires .................................................................. 732
A propos du shareware ............................................. 732
Java TDM Page XI lundi 1 dcembre 1997 9:59

1

L E P R O G R A M M E U R

Prsentation

Quoi de neuf ?

Loffre explosive doutils pour la cration dapplications et la diversit des ralisations bases
sur Java, visant le Web ou des applications de caractre gnral, sont une source inpuisable de
thmes de discussion.
La prsente dition est une rvision complte du livre original JAVA paru dans la collection Le
Programmeur. Elle vous propose une description de Java 1.1, des amliorations substantielles
de louvrage prcdent, entirement revu et mis jour, ainsi que des exemples supplmentaires :

G

Nouveaux packages, ou packages tendus de Java 1.1.

G

Nouveaux thmes Java tels que les classes internes (inner classes) et la rexion (reection).

G

Exemples de mise en uvre des nouvelles possibilits de Java 1.1.

G

Chapitre supplmentaire ddi lAWT (Abstract Windowing Toolkit), rcemment tendu.

G

Diagrammes montrant la nouvelle hirarchie des classes pour Java 1.1, et liste du contenu
de la bibliothque des classes, galement pour Java 1.1.

G

Etude de JavaBeans, le nouveau composant technologique de Java.

G

Nouvelle prsentation des vnements, tude des changements relatifs aux vnements.

G

Vue densemble de JDBC et de RMI.

G

Traitement tendu des rseaux.

G

Nouvelles fonctions de scurit de Java, y compris le mode de cration dapplets signes.

G

Etude approfondie du passage de Java 1.02 Java 1.1.

Public vis

Ce livre sadresse aux personnes qui ont acquis les bases de la programmation, aux program-
meurs chevronns, mais galement aux dbutants. Si vous connaissez les notions de variable,
de boucle et de fonction, ce livre est votre porte. Voici quelques bonnes raisons de le lire :

G

Vous matrisez le HTML et la programmation CGI (en Perl, AppleScript, Visual basic, etc.)
et vous souhaitez en apprendre plus sur la conception de pages Web.

part 00 Page 1 lundi 1 dcembre 1997 10:01

Prsentation

Java 1.1 2

G

Vous avez tudi le Basic ou le Pascal lcole, acquis les notions de base de la program-
mation et entendu parler de la puissance et de la simplicit de Java.

G

Vous programmez en C et en C++ depuis des annes et Java vous intrigue.

G

Java est particulirement adapt aux applets bases sur le Web. Convient-il aussi la cra-
tion dapplications plus gnrales ?

G

Vous savez programmer, mais pas en orient objet. Ce nest pas un handicap, mme si la
connaissance de ce type de programmation facilite la comprhension des deux premiers
chapitres.
Pour les programmeurs dbutants, ce livre est sans doute un peu ardu. Toutefois, Java est un
langage appropri lapprentissage de la programmation. Ainsi donc, en y consacrant du
temps, et grce ltude de tous les exemples, vous progresserez et vous commencerez bientt
crer vos propres applets.

Conventions

Prsente une information technique complmentaire.
Propose des conseils ou des simplications.
Met en garde contre un ventuel problme et propose des solutions.
Prsente et/ou dnit un nouveau terme, compos en italique.

Expose une analyse du code par lauteur.
Info
Astuce
Attention
Lexique
Analyse

part 00 Page 2 lundi 1 dcembre 1997 10:01

3

L E P R O G R A M M E U R

Introduction

Le World Wide Web est depuis longtemps un moyen de distribuer des informations statiques
un grand nombre de personnes. Mais avec larrive des formes et des images, les pages Web
sont devenues interactives. Cette interactivit tant simplement un nouveau mode daccs aux
mmes informations, les limites du Web devenaient videntes. Les concepteurs ont alors
essay den tendre les possibilits. Dautres innovations, comme le serveur Netscape destin
crer des animations dynamiques, ont t conues uniquement pour supporter des documents
statiques avec des images et du texte.
Java intervient alors pour les pages Web, avec la possibilit de contenir des applets, de petits
programmes crant des animations, des prsentations multimdias, des jeux (vido) en temps
rel, des jeux rseau multi-utilisateurs et une vritable interactivit. En fait, les applets Java
ralisent tout ce quun petit programme peut faire. De plus, elles sont tlcharges sur le
rseau et excutes dans une page Web par un programme de navigation compatible Java.
Cest une relle avance, au-del du concept initial du Web.
Lcriture des applets prsente un inconvnient : elles sont crites en langage Java, qui est un
langage de programmation. La cration dune applet Java est donc plus ardue que celle dune
page Web ou dune forme avec du code HTML.
De nombreux outils et de nombreux programmes sont dsormais disponibles pour faciliter la
cration dapplets Java. Cependant, la seule faon de se plonger dans Java est den apprendre
le langage et de commencer en tester le code. Mme sil existe des outils, la ralisation de
certaines fonctions ncessite la connaissance du langage.
Ce livre concerne le langage Java dans son intgralit. Vous y apprendrez crer non seule-
ment des applets pour le Web, mais aussi des applications. Les applications sont des
programmes Java plus gnraux dont lexcution ne ncessite pas un logiciel de navigation.

Organisation de louvrage

Ce livre couvre le langage Java et ses bibliothques de classes en vingt et un chapitres
regroups en trois parties, chacune delles couvrant un aspect diffrent du dveloppement des
applets Java et des applications.
La premire partie concerne ltude du langage de programmation Java :

G

Le Chapitre 1 constitue lintroduction : quest-ce que Java, quel est son intrt et comment
se le procurer. Vous y crerez aussi vos premires applications et applets Java.

part 00 Page 3 lundi 1 dcembre 1997 10:01

Introduction

Java 1.1 4

G

Le Chapitre 2 explore les concepts de la programmation oriente objet tels quils sappli-
quent dans Java.

G

Le Chapitre 3 dbute ltude plus approfondie du langage, avec les composants de base de
Java : les types de donnes, les variables et les expressions, telles que les expressions arith-
mtiques et les comparaisons.

G

Le Chapitre 4 concerne la manipulation des objets dans Java : comment les crer, accder
leurs variables et appeler leurs mthodes, et comment les comparer et les copier. Il fournit
galement un aperu des bibliothques de classes de Java.

G

Le Chapitre 5 introduit les tableaux, les instructions de contrle et les boucles.

G

Dans le Chapitre 6, vous apprendrez crer des classes et les introduire dans une applica-
tion Java (programme Java pouvant tourner sans navigateur Web), les classes tant les
blocs de base dun programme Java.

G

Le Chapitre 7 met en uvre les connaissances acquises au Chapitre 6. Vous apprendrez
crer et utiliser les mthodes, et vous tudierez leur rednition et leur polymorphisme,
ainsi que la cration de mthodes particulires appeles constructeurs.
La deuxime partie est consacre aux applets et aux bibliothques de classes de Java :

G

Le Chapitre 8 est consacr aux bases des applets : il montre en quoi elles sont diffrentes
des applications, comment les crer, et quelles sont les parties les plus importantes de leur
cycle de vie. Vous apprendrez aussi crer des pages HTML contenant des applets Java.

G

Le Chapitre 9 traite des classes Java servant dessiner des formes et des caractres (en
noir, blanc, ou toute autre couleur) lcran.

G

Le Chapitre 10 explique comment animer les formes cres au Chapitre 9. Il traite gale-
ment de la dnition des threads et de leur utilisation, ainsi que de laddition de sons au
moyen de Java.

G

Le Chapitre 11 plonge dans linteractivit, avec la gestion de la souris et du clavier dans les
applets Java.

G

Le Chapitre 12 est ambitieux. Il explique comment utiliser les outils de fentrage abstrait
de Java (AWT = Abstract Windowing Toolkit) pour crer une interface utilisateur dans une
applet, incluant menus, boutons, botes de contrle et autres lments.

G

Le Chapitre 13 approfondit ltude de lAWT.

G

Le Chapitre 14 explore les autres bibliothques de classes importantes servant la cration
des applets : fentres, dialogues, interconnexion de rseau, etc.
La troisime partie aborde les sujets pointus, utiles pour lcriture de programmes Java plus
complexes.

G

Le Chapitre 15 donne des prcisions sur les modicateurs du langage Java, relatifs aux
classes et aux mthodes dites nales et abstraites, en vue de protger les informations
prives dune classe vis--vis des autres classes.

part 00 Page 4 lundi 1 dcembre 1997 10:01

5

L E P R O G R A M M E U R

G

Le Chapitre 16 couvre les interfaces et les packages utiles la dclaration des mthodes
(an den faciliter la rutilisation) et au regroupement des classes en catgories.

G

Le Chapitre 17 traite les exceptions, telles que les erreurs, les avertissements ou toute autre
situation anormale gnre par le systme ou les programmes.

G

Le Chapitre 18 complte ltude des threads entame au Chapitre 10 et donne un aperu du
multithreading, qui permet diffrentes parties dun programme Java de se drouler en
parallle.

G

Le Chapitre 19 donne tous les dtails sur les ux dentres/sorties dans la bibliothque des
entres/sorties de Java.

G

Le Chapitre 20 concerne le code natif : comment introduire du code C dans les
programmes Java pour obtenir une fonction supplmentaire ou gagner en performance.

G

Le Chapitre 21 donne une vue densemble des dtails techniques qui assurent en arrire-
plan le fonctionnement de Java : le compilateur de pseudo-code et linterprteur, les techni-
ques utilises par Java pour assurer lintgrit et la scurit des programmes, et la faon
dont le ramasse-miettes de Java contribue lutilisation optimale des ressources.

Sites Web pour des informations complmentaires

Avant, pendant et aprs la lecture de ce livre, plusieurs sites Web peuvent intresser un dve-
loppeur Java.
Le site Web Java ofciel se trouve ladresse

http://java.sun.com/

. Vous y trouverez le logi-
ciel de dveloppement de Java et de la documentation sur tous les aspects du langage, y
compris une premire prsentation de Java 1.1. Il possde plusieurs sites miroirs dont il fournit
la liste. Ainsi, vous utiliserez le site le plus proche sur Internet.
Il existe galement un site pour les ressources dveloppeur, appel Gamelan, ladresse

http://www.gamelan.com/

. Ce site comporte un nombre considrable dapplets et dapplica-
tions, des exemples de code, des aides, et beaucoup dautres informations sur Java et son
volution.
Ce livre possde son propre site Web ladresse

http://www.lne.com/web/JavaProf/

. Les
informations fournies comprennent des exemples, des dtails complmentaires, des correc-
tions de ce livre et bien dautres choses intressantes.
Pour toute discussion sur le langage Java et les outils de dveloppement en Java, nous vous
suggrons les Newsgroups Usenet relatifs

comp.lang.java

:

comp.lang.java.programming

,

comp.lang.java.api

,

comp.lang.java.misc

,

comp.lang.java.security

, ainsi que

comp.lang
.java.tech

. Ces newsgroups constituent une excellente source de rponses aux questions et
dinformations sur les nouveaux dveloppements de Java.

part 00 Page 5 lundi 1 dcembre 1997 10:01

Introduction

Java 1.1 6

Contenu du CD-ROM

Un CD-ROM accompagne ce livre. Vous y trouverez les chiers de tous les exemples tudis,
ainsi quun grand nombre dapplications et dutilitaires.

Vous trouverez la liste des logiciels du CD-ROM dans le chier

readme.wri

(Windows) ou
dans le guide du CD-ROM (Macintosh).

Logiciels pour Windows

Java

G

Kit de dveloppement Java (JDK) de Sun pour Windows 95/NT, version 1.1 (incluant aussi
les versions Solaris)

G

Kit de dveloppement Beans de Sun pour Windows 95/NT (versions Solaris incluses)

G

Exemples dapplets Java

G

Exemples de scripts JavaScript

G

JFactory

G

Version dessai de Jamba pour Windows 95/NT

G

Jpad

G

Dmo Jpad Pro

G

Dmo Kawa

G

Dmo Studio J++

G

Dmo Javelin

G

Assistant base de donnes Jdesigner Pro pour Java

Outils HTML

G

Editeur HTML 32 bits Hot Dog

G

Editeur HTML HoTMeTal

G

Editeur HTML HTMLed

G

Editeur HTML WebEdit Pro

G

Dmo Spider 1.2

G

Dmo Web Analyzer
Info

part 00 Page 6 lundi 1 dcembre 1997 10:01

7

L E P R O G R A M M E U R

Applications graphiques, vido et son

G

Editeur Goldwave pour diter, enregistrer et jouer des sons

G

Utilitaire dagencement dimages MapThis

G

Paint Shop Pro

G

Utilitaire de capture dcran SnagIt

G

Navigateur et visualisateur dimages ThumbsPlus

G

Bibliothque dimages de The Rocket Shop

Utilitaires

G

Visualisateur Acrobat dAdobe

G

WinZip pour Windows 95/NT

G

Auto-extracteur WinZip

Logiciel pour Macintosh

Java

G

Kit de dveloppement Java de Sun pour Macintosh, version 1.0.2

G Exemples dapplets
G Exemples de scripts JavaScript
Outils HTML
G Freeware BBEdit 3.5.1
G Dmo BBEdit 4.0
G HTML edit
G Editeur HTML
G HTML Web Weaver
G HTML Markup
G WebMap
G Web Painter
G Graphic Converter
G GIFConverter
G Bibliothque dimages de The Rocket Shop
part 00 Page 7 lundi 1 dcembre 1997 10:01
Introduction
Java 1.1 8
Utilitaires
G Lecteur Acrobat dAdobe
G SnagIt Pro
G SoundApp
G Sparkle
G ZipIt 1.3.5 pour Macintosh
Le shareware
Le shareware nest pas gratuit. Ayez lobligeance de lire toute la documentation associe aux
produits correspondants (gnralement dans des chiers appels readme.txt ou license.txt), et
de vous conformer toutes les rgles nonces.
Installation du CD-ROM
Procdure dinstallation pour Windows 95 / NT4
1. Insrez le disque dans le lecteur de CD-ROM.
2. A partir du bureau Windows 95, faites un double-clic sur licne Poste de travail.
3. Faites un double-clic sur licne reprsentant votre lecteur de CD-ROM.
4. Pour excuter le programme dinstallation, faites un double-clic sur licne intitule
setup.exe.
Procdure dinstallation pour Windows NT 3.51
1. Insrez le CD-ROM dans le lecteur de CD-ROM.
2. Depuis le gestionnaire de programmes ou le gestionnaire de chiers, choisissez Excuter
dans le menu chier.
3. Tapez <lecteur>\setup et appuyez sur Entre, <lecteur> tant la lettre de votre lecteur de
CD-ROM. Par exemple, si la lettre de votre lecteur est D:, tapez D:\SETUP et appuyez sur
Entre.
4. Suivez les instructions afches lcran.
part 00 Page 8 lundi 1 dcembre 1997 10:01
9
L E P R O G R A M M E U R
Les utilisateurs de Windows NT 3.51 peuvent accder de deux manires au code source, aux
listings et aux applets de louvrage. Vous pouvez excuter le programme dinstallation de code
source (SOURCE.EXE) situ dans le rpertoire racine, ou choisir de dcompacter sparment
chaque lment. Ces chiers compacts se trouvent dans le dossier \WINNT351\BOOK\.
Les utilisateurs de Windows NT 3.51 ne peuvent accder au dossier WIN95NT4, ce dossier ayant
un nom de chier long comportant des caractres minuscules et majuscules. Ce lettrage
permet aux utilisateurs de Windows 95 et de Windows NT4 daccder directement ces
chiers sur le CD. Tous les autres noms de dossiers ont t traduits pour tre conformes aux
exigences du systme dexploitation Windows NT 3.51, et sont de ce fait accessibles sans dif-
cult. (NB : une tentative daccs au dossier \WINDOWS94NT4 ne provoquera aucun incident ;
tout simplement, vous ne pourrez pas lire son contenu.)
Procdure dinstallation pour Macintosh
1. Insrez le CD-ROM dans le lecteur.
2. Lorsquune icne du CD apparat sur le bureau, ouvrez le disque par un double-clic sur son
icne.
3. Faites un double-clic sur licne appele Guide to the CD-ROM, et suivez les instructions
qui apparaissent lcran.
Info
part 00 Page 9 lundi 1 dcembre 1997 10:01

L E P R O G R A M M E U R

Premire Partie

Le langage Java

1 Introduction la programmation Java
2 Java et la programmation oriente objet
3 Les bases de Java
4 Utilisation des objets
5 Tableaux, branchements conditionnels et boucles
6 Cration de classes et dapplications en Java
7 Complments sur les mthodes

part 01 Page 11 lundi 1 dcembre 1997 10:05

L E P R O G R A M M E U R

1
1

Introduction
la programmation
Java 1.1

part 01 Page 13 lundi 1 dcembre 1997 10:05

Introduction la programmation Java 1.1

Java 1.1 14
1

Bienvenue dans le monde de la programmation Java 1.1. Ce langage vous permettra de dve-
lopper des programmes excutables dans les pages Web (

applets

), aussi bien que des program-
mes autonomes (

applications

).
Ce chapitre prsente :

G

Java et sa version actuelle

G

Lintrt de Java, ses caractristiques et ses avantages, en comparaison des autres langages
de programmation

G

Les dbuts avec Java, les logiciels et lenvironnement ncessaires, mais aussi la terminolo-
gie de base

G

Les premiers programmes Java :

applet

et

application

Java

A voir lextraordinaire publicit autour de Java et lenthousiasme quil a provoqu, on pourrait
croire que ce langage est appel, sinon sauver le monde, du moins rsoudre tous les probl-
mes de lInternet. Il nen est rien. On a beaucoup exagr ses possibilits. Bien que Java soit
effectivement nouveau et intressant, ce nest en ralit quun autre langage de programmation,
qui permet dcrire des programmes Internet. A cet gard, Java est plus proche de langages de
programmation bien connus tels que C++, Visual Basic, ou Pascal, que dun langage de descrip-
tion de pages tel que le HTML, ou dun simple langage de scripts tel que JavaScript.
Java est un langage de programmation orient objet dvelopp par Sun Microsystems, plus
connu pour ses stations de travail UNIX. Conu sur le modle de C++, Java est simple, concis
et portable sur toutes les plates-formes et tous les systmes dexploitation. Cette portabilit
existe au niveau des sources et des binaires, ce qui veut dire que les programmes Java (applets
et applications) peuvent marcher sur toute machine pourvue dune machine virtuelle Java (ce
concept est expliqu plus loin).
Java est gnralement mentionn dans le contexte du World Wide Web, au sein duquel oprent
des navigateurs "compatibles Java", comme Netscape Navigator ou Internet Explorer de Micro-
soft (voir Figure 1.1). Outre ses caractristiques Web de base, un navigateur "compatible Java"
se distingue par sa capacit tlcharger et excuter des applets sur le systme de lutilisateur.
Les applets apparaissent dans la page Web comme des images. Mais, linverse des images, les
applets sont interactives et dynamiques et servent crer des animations, des gures, des zones
de dialogue avec lutilisateur, des jeux ou tout autre effet interactif, dans les textes et les graphi-
ques des pages Web.
La Figure 1.1 montre une applet excute dans Netscape 3.0. (Cette applet, disponible
ladresse

http://prominence.com/java/poetry/

, gnre des "aimants" lectroniques que lon
dplace pour crire des pomes ou des messages.)

part 01 Page 14 lundi 1 dcembre 1997 10:05

15

L E P R O G R A M M E U R

Les applets sont des programmes chargs depuis le World Wide Web par un navigateur Web, et
excuts lintrieur dune page Web HTML. Lexcution dapplets exige lutilisation dun
navigateur compatible Java, tel que Netscape Navigator ou Internet Explorer de Microsoft.

Une applet doit tre crite dans le langage Java, compile avec un compilateur Java et rfrence
dans le code HTML. Linstallation de chiers HTML et du chier dune applet Java sur un site
Web est identique celle dun chier image ou HTML ordinaire. Ainsi, lorsquun utilisateur
utilise un navigateur compatible Java, il visualise la page et son applet. Le navigateur tlcharge
la page sur le systme local et excute lapplet. Lutilisateur peut ainsi dialoguer avec lapplet
(les utilisateurs nayant pas de programme de navigation compatible avec Java peuvent voir du
texte, une image statique, ou rien du tout). Les applets, les programmes de navigation et le
World Wide Web travaillent ensemble. Cet aspect est trait plus loin.
Java permet de crer des applets et bien dautres choses. Cest un langage de programmation
part entire. De ce fait, il rend les mmes services et rsout les mmes problmes que dautres
langages de programmation comme C ou C++.
Figure 1.1
Netscape excutant
une applet Java.
Lexique

part 01 Page 15 lundi 1 dcembre 1997 10:05

Introduction la programmation Java 1.1

Java 1.1 16
1

Java hier, aujourdhui et demain

Java a t dvelopp par Sun Microsystems en 1991, dans le cadre dun projet de dveloppe-
ment de logiciel pour des appareils lectroniques de grande consommation : tlvisions,
magntoscopes, grille-pain, etc. Les objectifs de lpoque taient la concision, la rapidit, lef-
cacit et la portabilit. Java est devenu ainsi un langage idal pour la distribution dexcutables

via

le World Wide Web. Cest aussi un langage de programmation vocation gnrale, puisque
les programmes sont gnralement destins de multiples plates-formes.
Le langage Java, utilis dans divers projets de Sun (sous la dnomination Oak), avait peu dint-
rt conomique avant dtre associ HotJava. HotJava a t conu en 1994 titre exprimental
pour servir de moteur de tlchargement et dexcution des applets, mais aussi pour tre un
exemple dapplication complexe dveloppe avec Java. Malgr lattention accorde HotJava
par la communaut du Web, ce nest que plus tard, lorsque Netscape a incorpor dans son propre
navigateur laptitude excuter des applets, que Java a rellement pris son essor et commenc
provoquer, tant au sein du World Wide Web qu lextrieur, lenthousiasme quil suscite
aujourdhui. Ce succs destime est tel que, lintrieur du groupe Sun, le groupe Java est
devenu une liale part entire appele Javasoft.
Les versions de Java lui-mme, ou, comme on lappelle communment, lAPI Java, correspon-
dent des versions du kit du dveloppeur Java de Sun, ou JDK (Java Developers Kit). Lors de
la rdaction de cet ouvrage, deux versions du JDK retenaient lattention. Le JDK 1.02, plus
ancien, est trs largement utilis et support par les navigateurs les plus courants (Netscape 3.0
et Microsoft Internet Explorer 3.0), ainsi que par des outils de dveloppement tels que Caf de
Symantec et Visual J++ de Microsoft. Java 1.1, publi rcemment, comporte de nombreuses
fonctions complmentaires, mais, du fait de sa nouveaut, il nest pas encore aussi largement
support que la version 1.02. Cet ouvrage dcrit aussi bien Java 1.02 que Java 1.1, et signale les
diffrences. Les programmes Java 1.02 marchent sans problme sous Java 1.1, mais la rcipro-
que nest pas vraie ; les programmes de la version 1.1 ne marchent pas dans un environnement
1.02.
Pour programmer en Java, vous avez besoin dun environnement de dveloppement Java adapt
votre plate-forme. Le JDK de Sun rpond cette exigence. Il comporte des outils de compi-
lation et de test des applets et des applications Java. En outre, plusieurs excellents outils de
dveloppement Java ont t crs, parmi lesquels Java Workshop, le propre atelier de dvelop-
pement de Sun, Caf de Symantec, Visual J++ de Microsoft (qui est bien un outil Java, en dpit
de son nom) et Roaster de Natural Intelligence. De nouveaux outils de dveloppement apparais-
sent rgulirement. Si vous codez des programmes pour Java 1.1, assurez-vous que votre envi-
ronnement de dveloppement supporte le JDK 1.1 ; la date de lcriture du livre, le seul
environnement de dveloppement pour Java 1.1 est le JDK de Sun. Si vous ntes pas particu-
lirement intress par les fonctions spciques du 1.1, vous pouvez utiliser au choix un envi-
ronnement 1.02 ou 1.1.

part 01 Page 16 lundi 1 dcembre 1997 10:05

17

L E P R O G R A M M E U R

Pour faire tourner et visualiser des applets Java, il vous faut un navigateur ou un autre outil com-
patible Java. Comme nous lavons vu, les versions rcentes de Netscape Navigator et dInternet
Explorer (3.0) peuvent lune et lautre faire tourner des applets Java. (Notez quil existe de gran-
des diffrences dans la faon dont Java est support par les diffrents navigateurs.) Si vous
navez pas de navigateur compatible Java, vous pouvez utiliser lun des nombreux outils capa-
bles de faire marcher des applets. Le JDK en comporte un ; il sappelle Appletviewer. Comme
dans le cas des environnements de dveloppement, mez-vous des diffrences entre Java 1.02
et 1.1 ; lheure o nous crivons, il ny a pas de navigateur supportant Java 1.1, et la seule
manire de tester des applets crites au moyen du JDK 1.1 est de se servir de lAppletviewer de
Sun. Netscape 3.0 et Internet Explorer ne supportent PAS les applets de version 1.1.

Pour lheure, Netscape Communicator 4 est en version bta (sortie prvue aot 1997). Il sup-
porte certaines fonctions du JDK 1.1, mais pas toutes. Il les supportera peut-tre toutes lors de
la diffusion de la version nale.

Quel est lavenir de Java ? Java 1.1 comporte dimportantes modications, qui le font passer du
stade dun langage intressant et amusant pour crire des applets, celui dun langage plus puis-
sant et plus souple, pour la cration dapplications de grande envergure. En avanant dans
ltude de cet ouvrage, vous dcouvrirez la plupart de ces modications et leur intrt pour les
dveloppements en Java. Les versions futures de Java comporteront des fonctions encore plus
puissantes, adaptes diffrents types dapplications. Parmi les nouveauts gureront des
ensembles de classes Java et dAPI pour le multimdia, les applications graphiques et les mises
en page sophistiques, pour des fonctions avances de scurit, ainsi que pour une souplesse
accrue lors du dveloppement dinterfaces utilisateur graphiques.
En outre, Java stend, au-del du rle dun simple langage de programmation, vers des domai-
nes diffrents. Sun dveloppe des microprocesseurs Java, en vue dune excution acclre des
applications Java. Le Network computer de Sun utilise un systme dexploitation Java, conu
pour tourner sur des systmes petits et limits. La vision de Sun, en ce qui concerne lavenir, est
celle dun ordinateur entirement bas sur Java, quil sagisse de sa conception interne ou de
ses fonctionnalits externes.

Pourquoi apprendre Java ?

Les applets sont crites dans ce langage, do lintrt de lapprendre aujourdhui. Ce nest pas
le seul, Java ayant des avantages signicatifs sur les autres langages et environnements de pro-
grammation. Cest en fait un langage adapt toutes les tches de programmation. Cette section
dcrit quelques-uns de ces avantages.
Info

part 01 Page 17 lundi 1 dcembre 1997 10:05

Introduction la programmation Java 1.1

Java 1.1 18
1

Java ne dpend daucune plate-forme

Son indpendance vis--vis des plates-formes matrielles est son principal avantage. Il est donc
tout indiqu pour les applications qui doivent tourner sur diffrentes plates-formes. Cette carac-
tristique est vitale pour tout logiciel destin au World Wide Web. Lindpendance, dans le cas
de Java, se situe deux niveaux : source et binaire.

Les programmes indpendants des plates-formes peuvent tourner sur nimporte quel systme.
Les programmes Java peuvent tourner sur tout systme dot dune machine virtuelle Java.

Au niveau source, les types de donnes primaires de Java ont la mme taille, quelle que soit la
plate-forme de dveloppement. Les bibliothques de classes standard de Java facilitent lcri-
ture du code, qui est ensuite port de plate-forme en plate-forme, sans adaptation.
Lorsque vous crivez un programme en Java, vous navez pas tenir compte des fonctions de
votre systme dexploitation pour lexcution des tches de base. Lindpendance des plates-
formes au niveau source signie que vous pouvez dplacer des sources dun systme un autre,
puis les compiler et les faire marcher sans problme sur cet autre systme.
Dans le cas de Java, lindpendance des plates-formes ne se limite pas au source. Les chiers
binaires Java compils sont galement indpendants des plates-formes : ils peuvent tourner
directement sur toute plate-forme pourvue dune machine virtuelle Java, de sorte quil nest pas
ncessaire de recompiler le source.
Gnralement, la compilation dun programme crit en langage C (ou dans la majorit des lan-
gages) gnre du code machine ou des instructions destines au processeur. Ces instructions
sont spciques au processeur de lordinateur. Ainsi, lexcutable obtenu aprs compilation du
code sur un systme Pentium ne tourne que sur un systme Pentium. Pour lutiliser sur un autre
systme, il faut recompiler le code source avec un compilateur adapt. La consquence de ceci
est illustre par la Figure 1.2 : un excutable par systme.
Lexique
Votre code
Compilateur (Pentium)
Fichier binaire
(Pentium)
Fichier binaire
(PowerPC)
Fichier binaire
(SPARC)
Compilateur (PowerPC)
Compilateur (SPARC)
Figure 1.2
Programmes classiques
compils.

Java 1.1

part 01 Page 18 lundi 1 dcembre 1997 10:05

19

L E P R O G R A M M E U R

Le mcanisme de compilation est diffrent pour du code Java. Lenvironnement de dveloppe-
ment Java comprend un compilateur et un interprteur. Le compilateur ne gnre pas du code
machine mais du pseudo-code.
Pour excuter un programme Java, vous utilisez un interprteur de pseudo-code, qui lit le
pseudo-code et excute le programme Java (voir Figure 1.3). Le pseudo-code comporte des ins-
tructions qui ressemblent du langage machine, mais qui ne sont spciques aucun processeur
particulier. Un interprteur de pseudo-code spcique la plate-forme excute le pseudo-code
Java. Linterprteur de pseudo-code Java est souvent appel machine virtuelle Java ou interpr-
teur run-time Java.
O se procure-t-on linterprteur de pseudo-code ? Dans le cas des applets, linterprteur de
pseudo-code est inclus dans tout navigateur compatible Java, de sorte que vous navez pas
vous en proccuper ; les applets Java marchent automatiquement. Dans le cas dapplications
Java plus gnrales, vous devez disposer sur votre systme dun interprteur pour excuter les
programmes de ces applications. Actuellement, linterprteur peut tre fourni avec votre environ-
nement de dveloppement. Si vous achetez un programme Java, linterprteur est fourni avec.
Java Interpreter
(Pentium)
Java Interpreter
(Power PC)
Java Interpreter
(SPARC)
Java Code
Java Compiler
Java Bytecode
(Platform-
Independent)
Figure 1.3
Programmes Java.

part 01 Page 19 lundi 1 dcembre 1997 10:05

Introduction la programmation Java 1.1

Java 1.1 20
1

Dans lavenir, cependant, linterprteur de pseudo-code Java devrait tre livr avec tout nouveau
systme dexploitation. Ainsi, lors de lachat dune machine Windows, Java serait inclus gratui-
tement.
Lajout dun interprteur de pseudo-code peut passer pour une complication superue. Cepen-
dant, les programmes Java sous forme de pseudo-code sexcutent sur toutes les plates-formes
et tous les systmes dexploitation pour lesquels un interprteur Java est disponible. Cette carac-
tristique est essentielle pour permettre aux applets de tourner. En effet, le World Wide Web
nest li aucune plate-forme. Comme la lecture dun chier HTML, lexcution des applets
est donc possible sur les plates-formes possdant un programme de navigation compatible Java.
Linconvnient du pseudo-code est sa faible vitesse dexcution. Les programmes spciques
un systme tant directement lis au matriel pour lequel ils sont compils, ils tournent plus vite
quun pseudo-code Java trait par linterprteur. Ce nest pas un problme pour la majorit des
programmes Java. Cependant, sils doivent avoir une vitesse dexcution suprieure celle per-
mise par linterprteur, plusieurs solutions existent, notamment lintroduction de code natif dans
les programmes Java, ou lutilisation doutils spciaux (appels compilateurs juste--temps)
pour convertir le pseudo-code Java en code natif et en acclrer lexcution. Malheureusement,
la portabilit du pseudo-code Java est alors perdue. Ces deux mcanismes sont prsents dans
le Chapitre 20.

Java est orient objet

Pour certains, la programmation oriente objet (POO) sassimile lorganisation des program-
mes, ce qui est ralisable avec tous les langages. Nanmoins, travailler avec un langage et un
environnement de programmation orients objet permet de tirer le meilleur parti de cette mtho-
dologie, qui permet de crer des programmes souples et modulaires et den rutiliser le code.
Les concepts de Java sont hrits de C++ dont il est issu, mais aussi dautres langages orients
objet. Comme la plupart de ces langages, Java possde galement des bibliothques de classes,
qui fournissent les types de donnes de base, les possibilits dentres/sorties du systme et
dautres fonctions utilitaires. Ces bibliothques de base font partie de JDK, qui comprend ga-
lement des classes pour la gestion de rseau, des protocoles Internet communs et des outils
dinterface utilisateur. Ces bibliothques sont crites en langage Java, et sont donc portables sur
toutes les plates-formes.
Le Chapitre 2 apporte un complment dinformations sur la programmation oriente objet et
Java.

Java est facile apprendre

Outre sa portabilit et son orientation objet, Java a t conu pour tre concis, simple, facile
crire, compiler, corriger, mais surtout facile apprendre. Ce langage comporte peu de mots,
ce qui augmente sa abilit. Ainsi, le risque de tomber sur un problme pineux de programma-
tion est rduit. Java reste souple et puissant, malgr sa taille et sa conception simple.

part 01 Page 20 lundi 1 dcembre 1997 10:05

21

L E P R O G R A M M E U R

Java est issu des langages C et C++. Cest pourquoi sa syntaxe et sa structure oriente objet
ressemblent celles de C++. La connaissance de C++ facilite lapprentissage de Java, car les
bases sont dj acquises.
La complexit des langages C et C++ a t en grande partie exclue de Java. Cette simplication
a t obtenue sans rduire vraiment sa puissance. Par exemple, il ne possde ni pointeur, ni
arithmtique sur les pointeurs. Ses chanes et ses tableaux sont de vritables objets. Sa gestion
de la mmoire est automatique. Ces caractristiques perturbent les programmeurs exprimen-
ts, mais favorisent les dbutants ou les programmeurs habitus dautres langages.
Bien que la conception de Java le rende plus facile apprendre que dautres langages de pro-
grammation, lutilisation dun langage de programmation demeure beaucoup plus complique
que lutilisation, par exemple, de HTML. Si vous navez aucune exprience des langages de
programmation, vous pouvez prouver des difcults comprendre Java. Mais ne vous dcou-
ragez pas ! Lapprentissage de la programmation est une acquisition utile lgard du Web et
des ordinateurs en gnral, et commencer par ce langage prsente un trs grand intrt.

Programmer avec Java

Dans la deuxime moiti de ce chapitre, vous attaquerez les aspects les plus simples de Java en
crant deux programmes Java : une application Java indpendante, et une applet, que vous
visualiserez au moyen dun navigateur compatible Java. Bien que ces deux programmes soient
extrmement simples, ils vous donneront une ide de laspect dun programme Java et de la
faon dont il est compil et excut.

Acquisition dun environnement
de dveloppement Java

Pour crire des programmes Java, vous avez videmment besoin dun environnement de dve-
loppement Java. (Les navigateurs tels que celui de Netscape vous permettent dexcuter des
applets Java, mais ils ne vous permettent pas den crire. Pour cela, il vous faut un outil spar.)
Le JDK de Sun, disponible par tlchargement depuis le site Web de JavaSoft (

http://
www.javasoft.com

) et inclus sur le CD joint cet ouvrage, peut tre utilis dans ce but. Cepen-
dant, malgr lengouement quil suscite, ce nest pas loutil de dveloppement le plus facile
utiliser. Si vous avez lhabitude dun environnement de dveloppement comportant une inter-
face utilisateur graphique, un diteur et un dbogueur intgrs, vous jugerez sans doute primi-
tive linterface du JDK, base de lignes de commande. Heureusement, le JDK nest pas le seul
outil disponible.
Les environnements de dveloppement intgrs disponibles comprennent Java Workshop de
Sun pour Solaris, Windows NT et Windows 95 (des informations sont proposes

http://
www.sun.com/developer-products/java/

) ; Caf de Symantec pour Windows 95, Windows NT

part 01 Page 21 lundi 1 dcembre 1997 10:05

Introduction la programmation Java 1.1

Java 1.1 22
1

et Macintosh (

http://cafe.symantec.com/

) ; Visual J++ de Microsoft pour Windows 95 et
Windows NT (

http://www.microsoft.com/visualj/

) ; et Roaster de Natural Intelligence
(

http://www.natural.com/pages/products/roaster/index.html

). Tous sont des produits
commerciaux, mais vous devriez pouvoir tlcharger des versions dessai ou des versions limi-
tes de ces programmes pour les tester.

Les environnements de dveloppement graphiques sont dun usage beaucoup plus facile que le
JDK standard. Si vos moyens et le temps dont vous disposez le permettent, procurez-vous lun
de ces outils, qui rendra votre activit de dveloppement Java beaucoup plus agrable.

Installation du JDK et des fichiers dexemples

Le JDK 1.1 de Sun pour Solaris et Windows fait partie des programmes du CD-ROM associ
au livre. Si vous travaillez sur un Macintosh, le JDK est galement disponible sur le CD, mais
il est en version 1.02 (il nexiste pas encore de version Mac du JDK 1.1). Le CD-ROM comporte
galement tous les exemples de code du livre, ce qui vous vitera davoir les saisir. Pour ins-
taller le JDK, ou les chiers dexemples, ou les deux, appliquez lune des procdures dcrites
ci-aprs :

Si vous ne disposez pas dun lecteur de CD-ROM, vous pouvez accder ces chiers par
lintermdiaire du World Wide Web. Vous pouvez tlcharger le JDK lui-mme partir de

http://www.javasoft.com/products/JDK/1.1/index.html

, et linstaller partir des instruc-
tions des pages ci-aprs. Si vous utilisez un Mac et si vous souhaitez utiliser les fonctions 1.1
du JDK, consultez priodiquement cette page pour voir si le JDK 1.1 est dsormais diffus.
Les chiers dexemples de ce livre sont disponibles sur le site Web de louvrage :

http://
www.lne.com/Web/Java1.1/

.
Si vous tlchargez le JDK et les chiers sources, au lieu de les lire depuis le CD-ROM, lisez
dabord la section "Conguration du JDK" pour vous assurer que vos rglages sont corrects.

Le JDK de Sun tourne sous Windows 95 et Windows NT, mais pas sous Windows 3.x.
Pour installer le JDK ou les chiers dexemples sous Windows, excutez le programme Setup
du CD-ROM (lancement automatique par un double-clic sur licne du CD). Par dfaut, le logi-
ciel est install sur C:/JKD1.1 ; vous pouvez linstaller nimporte quel autre emplacement de
votre disque dur. Des options permettent dinstaller le JDK, les chiers dexemples et divers
autres chiers supplmentaires.
Aprs installation du JDK, reprez le chier appel

classes.zip

dans le dossier

JDK\lib

. Il
nest pas ncessaire de dcompacter ce chier.
Le JDK de Sun pour Macintosh tourne sous le systme 7 (MacOS) pour 68KB ou Power Mac.
Pour installer le JDK ou les chiers dexemples sur Macintosh, dcompactez le chier original

bin

ou

hqx

sur votre disque dur, et double-cliquez sur le programme dinstallation. Par dfaut,
le package sera install dans le dossier Java sur le disque dur ; vous pouvez linstaller nimporte
Info
Info

part 01 Page 22 lundi 1 dcembre 1997 10:05

23

L E P R O G R A M M E U R

o ailleurs si vous le souhaitez. Des options permettent dinstaller le JDK, les chiers dexem-
ples et divers autres chiers supplmentaires.
Le JDK de Sun pour Solaris tourne sous Solaris 2.3, 2.4 et 2.5, ainsi que sur la version x86 de
Solaris.
Le CD-ROM de ce livre place le JDK dans le dossier

JDK/INTESOL/jdk1_1-beta4-solaris-
x86.sh

ou dans le dossier

JDK/SPARCSOL/jdk1_1-solaris-sparc.sh

, selon le systme dont vous
disposez. Vous trouverez des dtails relatifs votre version particulire de Solaris en consultant
le site Web JavaSoft :

http/www.javasoft.com/products/jdk/1.1/installation-solaris2.html

Les chiers dexemples gurent galement sur le CD-ROM dans

source.source.tar

. Crez un
dossier o rsideront vos chiers dexemples (par exemple, un dossier appel

Javaexemples

dans votre rpertoire personnel), copiez le chier

source.tar

cet endroit, puis utilisez la com-
mande

tar

pour lextraire, comme suit :


mkdir~/javaexemples


cp/cdrom/source/source.tar

Configuration du JDK

Aprs linstallation du JDK au moyen des programmes de mise en place gurant dans le
CD-ROM, il devrait normalement tre congur convenablement. Cependant, la plupart des
problmes rencontrs avec Java tant dus des erreurs de conguration, il est souhaitable de
vrier quelle est correcte. Si vous avez install le JDK depuis une autre source que le CD-ROM,
vous avez sans doute intrt lire attentivement cette section.
Le JDK exige deux modications importantes de votre

autoexec.bat

pour tourner correctement :
le rpertoire

JDK1.1\bin

doit se trouver sur le chemin dexcution, et la variable

CLASSPATH

doit
avoir t initialise.
Modiez votre

autoexec.bat

au moyen de votre diteur de texte habituel (le Bloc-notes con-
vient parfaitement). Recherchez une ligne du genre :

PATH C:\WINDOWS;C:WINDOWS\COMMAND;C:\DOS; ...

Quelque part sur cette ligne vous devez voir une entre pour le JDK ; si vous installez le JDK
depuis le CD-ROM, la ligne devrait avoir laspect suivant (les points indiquent quil peut y avoir
dautres lments sur la ligne en question) :

PATH C:\WINDOWS; ... C:\JDK1.1\BIN; ...

Si vous ne trouvez pas de rfrence

JDK\BIN

ou

JAVA\BIN

dans votre PATH, ajoutez-la. Ajoutez
la n de cette ligne le nom complet du chemin conduisant votre installation JDK, commen-
ant par C et nissant par BIN; par exemple, C:\JAVA\BIN ou C:\JDK1.1\BIN.
part 01 Page 23 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 24
1
La seconde addition indispensable au chier autoexec.bat concerne la variable CLASSPATH, si
elle ny gure pas dj. Cherchez une ligne du genre :
SET CLASSPATH=C\TEACHY~1\JDK1.1.\lib\classes.zip;.;
La variable CLASSPATH peut contenir dautres indications pour Netscape ou Internet Explorer,
mais ce qui vous intresse le plus, cest une rfrence au chier classes.zip du JDK, et au
rpertoire courant (.). Si votre chier autoexec.bat ninclut aucun de ces deux emplacements,
ajoutez au chier une ligne contenant ces deux indications (la ligne ci-avant fera laffaire).
Aprs avoir sauvegard votre chier autoexec.bat, vous devez redmarrer Windows pour ren-
dre effectives les modications.
Le JDK pour Macintosh ne devrait pas avoir besoin dtre congur la suite de linstallation.
Pour congurer le JDK dans le cas de Solaris, il suft dajouter le rpertoire java/bin ou jdk/
bin votre chemin dexcution.
En gnral, linsertion dune ligne telle que la suivante dans vos chiers .cshrc, .login ou
.profile permet dobtenir le rsultat cherch :
set path= (~/java/bin/ $path)
Cette ligne correspond au cas o le JDK (en tant que dossier java) est install dans votre rper-
toire personnel ; si vous lavez install ailleurs, vous devez substituer le nom de chemin corres-
pondant.
Assurez-vous que vous utilisez la commande source avec le nom du chier adquat, pour que
le changement prenne effet (sinon, faites un log out suivi dun log in).
source ~/.login
Cration dune application Java
Commenons par une application Java simple : le programme classique Hello World par lequel
dbutent tous les livres de programmation.
Les applications Java sont diffrentes des applets. Les applets sont des programmes Java tl-
chargs par lintermdiaire du World Wide Web, et excuts sur la machine de lutilisateur par
un navigateur Web compatible Java.
Les applications Java, en revanche, sont des programmes plus gnraux crits dans le langage
Java. Elles nont pas besoin dun navigateur pour tourner ; Java peut tre utilis pour crer tou-
tes sortes dapplications, qui pourraient avoir t cres avec un langage de programmation
classique.
Un programme Java peut tre une applet ou une application, ou les deux, selon la manire dont
le programme est crit et selon ses fonctions. Au cours de cette premire partie, pour apprendre
le langage Java, vous crirez surtout des applications ; puis, dans la seconde partie de louvrage,
vous utiliserez ce que vous avez appris pour crire des applets. Il est prfrable de commencer
part 01 Page 24 lundi 1 dcembre 1997 10:05
25
L E P R O G R A M M E U R
par ce stade lmentaire, car tout ce que vous apprendrez en crant de simples applications Java
vous servira pour crer des applets.
Cration du fichier source
Dans tous les langages de programmation, les chiers source sont crs laide dun diteur de
texte. Java nchappe pas cette rgle ; les chiers sont sauvegards en mode ASCII simple,
sans caractre de contrle. Les diteurs exploitables sous UNIX sont emacs, ped, ou vi. Sous
Windows, on peut choisir le Bloc-notes ou lEditeur DOS (nous vous conseillons dutiliser le
Bloc-notes en shareware). Sur Mac, vous pouvez utiliser SimpleText (fourni avec le Mac) ou le
shareware Bbedit. Si vous utilisez un environnement de dveloppement comme Caf, vous uti-
liserez lditeur de texte qui lui est associ.
Si vous faites votre dveloppement Java sous Windows, assurez-vous que Windows comprend
lextension de chier .java avant de vous lancer ; autrement, votre diteur de texte attachera
systmatiquement une extension .txt tous vos chiers. La mthode la plus simple pour obtenir
le rsultat voulu est de taper le nom de chier entre guillemets ("HelloWorld.java"). Cepen-
dant, il vaut mieux aller une fentre de lExplorateur Windows, slectionner Afchage |
Options | Types de chiers, choisir Nouveau type, et inscrire respectivement fichier source
Java et .java dans les zones de texte Description du type et Extension associe.
Aprs avoir slectionn lditeur, saisissez le programme Java prsent dans le Listing 1.1.
Noubliez ni parenthse, ni virgule ou guillemet, et utilisez la mme casse (majuscules et
minuscules) que sur le listing.
Le code de ces exemples gure galement sur le CD-ROM. Toutefois, si vous tapez vous-mme
ces premiers exemples, qui sont trs courts, vous aurez une ide plus prcise de ce quest le code
Java.
Listing 1.1 Premire application Java
1: class HelloWorld {
2: public static void main (String args[]) {
3: System.out.println("Hello World!");
4: }
5: }
Aprs avoir saisi le programme, sauvegardez le chier sur votre disque sous le nom Hello-
World.java. Ce nom est trs important. Les fichiers source Java doivent avoir le mme nom que
la classe quils dnissent (y compris les mmes lettres majuscules ou minuscules), et ils doi-
vent avoir lextension .java. Ici, la dnition de classe a le nom HelloWorld, de sorte que le
nom du chier doit tre HelloWorld.java. Si vous donnez un autre nom au chier (mme quel-
que chose comme helloworld.java ou Helloworld.java), vous ne pourrez pas le compiler.
Assurez-vous que le nom est bien HelloWorld.java.
Info
Info
part 01 Page 25 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 26
1
Les numros placs en dbut de ligne ne font pas partie du programme. Ils rfrencent les lignes
et sont repris dans le texte lors de lanalyse dun programme. Ils ne doivent donc pas tre saisis.
Aprs avoir saisi le programme, sauvegardez le chier sur votre disque sous le nom Hello-
World.java. Ce nom est trs important. Les fichiers source Java doivent avoir le mme nom que
la classe quils dnissent (y compris les mmes lettres majuscules ou minuscules), et ils doi-
vent avoir lextension .java. Ici, la dnition de classe a le nom HelloWorld, de sorte que le
nom du chier doit tre HelloWorld.java. Si vous donnez un autre nom au chier (mme quel-
que chose comme helloworld.java ou Helloworld.java), vous ne pourrez pas le compiler.
Assurez-vous que le nom est bien HelloWorld.java.
Vous pouvez sauvegarder vos chiers Java nimporte o sur le disque, mais il vaut mieux les
conserver tous dans un mme dossier. Les chiers dexemples de ce chapitre ont t placs dans
un dossier appel TYJtests (abrviation de Teach Yourself Java tests).
Compilation et excution du fichier source
Vous tes maintenant prts compiler le chier. Si vous utilisez le JDK, conformez-vous aux
instructions des pages suivantes. Si vous utilisez un environnement de dveloppement graphi-
que, vous disposerez probablement dun bouton ou dune option pour lancer la compilation
(vriez-le dans la documentation fournie avec le programme).
Le compilateur associ au JDK est pilot par des lignes de commande. Pour utiliser ce compi-
lateur, vous devez dabord dmarrer un shell DOS. Sous Windows 95, ce shell DOS fait partie
du menu Programmes (il sappelle Commandes MS-DOS).
Une fois dans le DOS, changez les rpertoires pour aller lendroit o vous avez sauvegard
votre chier HelloWorld.java. Comme nous avons plac le ntre dans le dossier TYJtests, nous
utilisons la commande :
CD C:\TYJtests
Aprs avoir commut sur le rpertoire convenable, utilisez la commande javac comme suit, en
reprenant le nom du chier que vous avez sauvegard sous Windows (javac veut dire "Java
compiler"). Ici encore, le respect de la casse est requis :
javac HelloWorld.java
Nous avons insist sur la ncessit dutiliser le nom de chier original, parce quune fois
lintrieur du shell DOS, vous vous apercevrez que les noms de chiers longs ont t tronqus
en noms 8.3 positions conformes lancien style, et quen fait, HelloWorld.java apparat
sous la forme HELLO~1.jav. Ne vous en inquitez pas ; ceci est d simplement la manire dont
Windows 95 gre les noms de chiers longs. Ignorez le fait que le chier semble sappeler
HELLO~1.jav et tenez-vous en au nom de fichier utilis lors de la sauvegarde.
La Figure 1.4 montre ce que nous avons fait lintrieur du shell DOS, pour vous permettre de
vrier que vous tes sur la bonne voie.
Attention
Info
part 01 Page 26 lundi 1 dcembre 1997 10:05
27
L E P R O G R A M M E U R
Si tout se passe bien, vous obtenez un chier appel HelloWorld.class (du moins, cest son
appellation si vous lexaminez lextrieur du shell DOS ; lintrieur du DOS, il sappelle
HELLO~1.cla). Cest votre fichier de pseudo-code Java. Si vous obtenez des messages derreur,
revenez votre chier source dorigine et assurez-vous que vous lavez tap exactement de la
manire prsente sur le Listing 1.1, avec les majuscules et minuscules gurant sur le modle.
Le chier doit avoir exactement la mme casse que le nom de la classe (lun et lautre scrivent
HelloWorld).
Lorsque vous disposez dun chier de classe, vous pouvez vous en servir au moyen de linter-
prteur de pseudo-code Java. Linterprteur Java sappelle simplement java, et est lanc depuis
le shell DOS de la mme manire que javac. Faites marcher votre programme Hello World
comme suit partir des lignes de commandes, en respectant bien la casse indique (et remar-
quez que largument du programme java na pas dextension .class) :
Java HelloWorld
Si votre programme a t tap et compil correctement, vous obtenez en retour sur votre cran
la phrase Hello World!. La Figure 1.5 montre ce que nous avons fait.
Notez bien que le compilateur Java et linterprteur Java sont deux choses diffrentes. Vous uti-
lisez le compilateur Java (javac) pour crer des chiers .class partir de vos chiers source
Java, et vous utilisez linterprteur Java (java) pour excuter effectivement vos chiers .class.
Le JDK pour le Mac est fourni avec une application appele Compilateur Java. Pour compiler
votre chier source Java, faites simplement un glisser-dposer du chier sur licne du compi-
lateur Java. Le programme compile votre chier Java et, sil ny a pas derreur, cre un chier
appel HelloWorld.class dans le mme dossier que votre chier source.
Figure 1.4
Compilation Java
dans le shell DOS.
Attention
part 01 Page 27 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 28
1
En plaant un alias du compilateur Java sur le bureau, vous pouvez plus facilement glisser et
dposer des chiers source Java.
En cas derreur, vriez la frappe de votre chier source dorigine, qui doit tre exactement
conforme au Listing 1.1, notamment en ce qui concerne la casse. Assurez-vous aussi que la
casse du nom du chier est bien la mme que celle de la classe (cest--dire HelloWorld dans
lun et lautre cas).
Aprs avoir russi gnrer un chier HelloWorld.class, faites simplement un double-clic sur
ce chier pour lexcuter. Lapplication Java Runner, qui fait partie du JDK, dmarre alors, et
le programme vous demande les arguments en lignes de commande. Laissez cet cran vide et
cliquez sur OK. Une fentre appele stdout apparat alors avec le message Hello World!. La
Figure 1.6 montre cette fentre.
Cest tout ! Souvenez-vous que vous vous servez de lapplication Compilateur Java pour com-
piler vos chiers .java et en faire des chiers .class, eux-mmes excuts en vous servant de
Java Runner.
Pour compiler un chier source Java sous Solaris, vous utilisez le compilateur Java en lignes de
commande qui est fourni avec le JDK. Au moyen dune ligne de commande UNIX cd, passez
Figure 1.5
Excution dune application
Java dans le shell DOS.
Astuce
Figure 1.6
Excution dapplications
Java sur Mac au moyen
de Java Runner.
part 01 Page 28 lundi 1 dcembre 1997 10:05
29
L E P R O G R A M M E U R
sous le rpertoire qui contient votre chier source Java. Le ntre tant plac dans le rpertoire
TYJtests, il est accessible par la commande :
cd~/TYJtests
Une fois dans le rpertoire adquat, utilisez la commande javac en lui adjoignant le nom du
chier, comme suit :
javac HelloWorld.java
Si tout se passe normalement, vous obtenez un chier appel HelloWorld.class, dans le mme
rpertoire que votre chier source. Cest votre chier de pseudo-code. En cas derreur, vriez
votre chier source dorigine et assurez-vous que vous lavez tap exactement comme sur le
Listing 1.1, en utilisant la mme casse. Vriez galement que la casse pour les lettres du nom
de chier est la mme que pour celles du nom de la classe, cest--dire HelloWorld.
Disposant dun chier .class, vous pouvez lexcuter au moyen de linterprteur de pseudo-
code Java. Linterprteur Java sappelle simplement java, et vous pouvez le lancer en lignes de
commande, tout comme javac (notez que largument du programme Java ne comporte pas
dextension .class) :
java HelloWorld
Si votre programme a t tap et compil correctement, vous devez voir en retour la phrase
Hello World! safficher sur votre cran. La Figure 1.7 montre les commandes que nous avons
utilises jusqu ce stade (lindication [desire]~[1] est le prompt utilis sur notre systme).
Notez bien que le compilateur et linterprteur Java sont deux choses diffrentes. Vous utilisez
le compilateur Java (javac) pour crer des chiers .class partir de vos chiers source Java,
et vous utilisez linterprteur Java (java) pour excuter effectivement vos chiers .class.
Cration dune applet Java
La cration dune applet diffre de celle dune simple application. En effet, les applets Java tour-
nent et sont afches dans une page Web, parmi dautres lments. Elles suivent, par cons-
quent, des rgles de comportement particulires, rendant leur cration plus complexe que celle
dune application.
Figure 1.7
Compilation et excution
dune application Java
sous Solaris.
Info
part 01 Page 29 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 30
1
Par exemple, pour crer une simple applet Hello World, il ne suft pas de pouvoir imprimer un
message sous forme de jeu de caractres, il faut aussi amnager un espace pour le message sur
les pages Web, utiliser des fonctions graphiques et dnir des polices pour peindre le message
sur lcran.
En ralit, on peut faire tourner une simple application Java sous forme dapplet, mais le mes-
sage Hello World safche alors sur une fentre spciale ou sur un chier log, selon la manire
dont la sortie du navigateur a t paramtre. Vous verrez ces points plus en dtail dans la
seconde partie de louvrage.
Cration du fichier source
Dans lexemple suivant, vous allez crer lapplet Hello World, la placer dans une page Web et
observer le rsultat.
Comme dans le cas de lapplication Hello World, vous commencez par crer le chier source
au sein dun simple diteur de texte. Le Listing 1.2 montre le code de cet exemple.
Listing 1.2 Applet Hello World
1: import java.awt.Graphics;
2:
3: class HelloWorldApplet extends java.applet.Applet {
4:
5: public void paint(Graphics g) {
6: g.drawString("Hello World!", 5, 25);
7: }
8:}
Sauvegardez ce chier de la mme manire que vous avez sauvegard lapplication Hello
World, en utilisant comme nom de chier un nom identique celui de la classe. En loccurrence,
le nom de la classe est HelloWorldApplet, vous devez donc sauvegarder le chier sous le nom
HelloWorldApplet.java. Nous avons plac le fichier dans un dossier appel TYJch01, mais vous
pouvez utiliser tout autre dossier de votre choix.
Compilation du fichier source
Ltape suivante consiste compiler le chier de lapplet Java. Bien quil sagisse dune applet,
vous compilez le chier exactement de la mme manire que celui dune application, en utili-
sant lune des procdures suivantes :
Depuis un shell DOS, faites un cd vers le rpertoire contenant le chier source de votre applet,
et utilisez la commande javac pour compiler ce chier (attention aux majuscules et aux
minuscules) :
javac HelloWorldApplet.java
Info
part 01 Page 30 lundi 1 dcembre 1997 10:05
31
L E P R O G R A M M E U R
Faites glisser le chier HelloWorldApplet.java sur licne du compilateur Java.
Dans un systme ligne de commande, faites un cd vers le rpertoire contenant le chier source
de lapplet, et utilisez la commande javac pour le compiler :
javac HelloWorldApplet.java
Inclusion de lapplet dans une page Web
Si vous avez tap le chier correctement, vous obtenez un chier appel HelloWorldApplet
.class, situ dans le mme dossier que le fichier source. Cest le fichier de lapplet Java ; pour
faire tourner lapplet dans une page Web, vous devez, lintrieur du code HTML de cette page,
vous rfrer ce chier class en utilisant la balise <APPLET>. Le Listing 1.3 montre un simple
chier HTML susceptible dtre utilis cette n.
Listing 1.3 Code HTML avec lapplet
1: <HTML>
2: <HEAD>
3: <TITLE>Hello to Everyone!</TITLE>
4: </HEAD><BODY>
5: <P>My Java applet says:
6: <APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25>
7. </APPLET>
8: </BODY>
9: </HTML>
<APPLET> rfrence une applet dans le fichier HTML. Vous en apprendrez davantage plus loin
dans ce chapitre, mais vous pouvez noter deux choses ds prsent :
G Lattribut CODE est utilis pour indiquer le nom de la classe contenant lapplet, ici Hello-
WorldApplet.class.
G Les attributs WIDTH et HEIGHT indiquent la taille de lapplet sur la page. Le navigateur les uti-
lise pour dterminer lespace rserv lapplet sur la page. Dans lexemple, une bote de
150 pixels de large sur 25 pixels de haut est cre.
Sauvegardez le chier HTML dans le mme dossier que votre chier classe, avec un nom des-
criptif et une extension .html (par exemple, vous pourriez utiliser le mme nom que pour
lapplet : HelloWorldApplet.html).
Comme nous lavons dj vu, votre diteur de texte peut insister et adjoindre vos chiers
HTML une extension .txt, tant que Windows ne reconnat pas lextension .html. Choisissez
Afchage | Options | Types de chier partir dune fentre de lexplorateur de Windows pour
rgler ce problme.
Info
part 01 Page 31 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 32
1
Il reste maintenant visualiser lapplet. Pour cela, il faut lun des lments suivants :
G Un navigateur supportant les applets Java, comme Netscape 2.0. ou Explorer 3.0. Si vous
travaillez sur un Macintosh, vous avez besoin de Netscape 3.0 ou dune version plus rcente.
Si vous utilisez Windows 95 ou NT, vous avez besoin dune version 32 bits de Netscape. Et
si vous utilisez Internet Explorer, il vous faut la version 3.0 bta 5 ou une version plus
rcente (ou la version dnitive).
G Lapplication Appletviewer, incluse dans JDK. Appletviewer nest pas un programme de
navigation Web, et ne permet pas la visualisation de la page Web entire. Cest une solution
acceptable, faute de mieux, pour tester et voir quoi ressemble une applet.
G Un visualisateur dapplet ou un outil dexcution fourni avec votre environnement de dve-
loppement.
Avec un programme de navigation compatible Java comme Netscape, choisissez Fichier | Ouvrir
chier pour naviguer vers le chier HTML contenant lapplet et la visualiser (assurez-vous
douvrir le chier HTML et non le chier classe). Dans le cas dInternet Explorer, choisissez
Fichier | Ouvrir, puis slectionnez Parcourir pour trouver le chier sur votre disque. Pour le
moment, aucune installation sur le serveur Web nest ncessaire : tout se passe sur le systme
local. Notez que lapplet Java peut mettre un certain temps dmarrer une fois la page charge ;
soyez patient. La Figure 1.8 montre le rsultat du fonctionnement de lapplet sous Netscape.
Sans programme de navigation compatible Java, ou si vous voulez tester des applets crites pour
Java 1.1, vous pouvez utiliser lAppletviewer du JDK.
Pour faire tourner lAppletviewer des versions Windows ou Solaris du JDK, faites un cd vers le
rpertoire o se trouvent vos chiers classe et HTML, et utilisez la commande appletviewer
avec le nom du chier HTML que vous venez de crer :
appletviewer HelloWorldApplet.html
Lappletviewer ne montrera que lapplet elle-mme, sans le texte HTML correspondant.
Figure 1.8
Applet tournant sous
Netscape.
part 01 Page 32 lundi 1 dcembre 1997 10:05
33
L E P R O G R A M M E U R
Rsolution des problmes
Cette section peut vous aider surmonter dventuelles difcults rencontres lors de la mise
en uvre des exemples prcdents. Voici les problmes les plus courants, et leurs solutions.
G Bad command or filename ou Command not found
Ce type derreur apparat lorsque le rpertoire contenant le binaire du JDK ne se situe pas
sur le chemin afch pour lexcution, ou si le chemin daccs ce rpertoire est erron.
Sous Windows, vriez soigneusement votre chier autoexec.bat ; sous UNIX, vriez le
chier systme contenant les commandes de dnition du chemin (.cshrc, .login,
.profile, ou un fichier similaire).
G javac: invalid argument
Assurez-vous que le nom du chier utilis dans la commande javac est bien celui du
chier. En particulier, dans le cas du shell DOS, vous devez utiliser le nom de chier
Windows comportant une extension .java, et non lquivalent DOS (HELLO~1.java, par
exemple).
G Warning: public class HelloWorldApplet must be defined in a file called HelloWorld-
Applet.java
Cette erreur rsulte le plus souvent de la non-concordance entre le nom de la classe indiqu
par le chier Java lui-mme (le nom suivant le mot class) et le nom du chier source Java.
Les deux noms doivent tre identiques, en tenant compte des minuscules et majuscules
(cette erreur particulire correspond en gnral des casses non identiques). Renommez
soit le chier, soit la classe, et lerreur disparatra.
G Erreurs du type Insufficient memory
Le JDK nutilise pas la mmoire dune manire trs efcace. Confront ce problme de
mmoire, essayez de quitter des programmes volumineux avant de compiler ou de lancer
vos programmes Java, mettez en uvre la mmoire virtuelle, ou installez davantage de
RAM.
G Autres types derreur de code
Si vous ne russissez pas compiler vos chiers source Java pour dautres raisons que
celles mentionnes ci-avant, vriez encore que votre frappe correspond bien ce qui est
indiqu dans les exemples, notamment en ce qui concerne les majuscules et les minuscules.
Java est sensible la casse, ce qui veut dire que les minuscules et les majuscules sont trai-
tes diffremment. Si vous ne voyez pas do peut venir une erreur, essayez de comparer
vos chiers source aux chiers du CD-ROM.
part 01 Page 33 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 34
1
Rsum
Ce chapitre a prsent le langage Java avec ses caractristiques et ses objectifs. Il ressemble
C ou C++ et permet de dvelopper de nombreux types de programmes. Lune de ses utilisations
les plus courantes actuellement est le dveloppement dapplets pour les navigateurs compati-
bles Java. Les applets sont des programmes Java tlchargs et excuts au sein dune page
Web. Elles peuvent crer des animations, des jeux, des programmes interactifs et dautres effets
multimdias sur les pages Web.
Les forces de Java sont sa portabilit (source et binaire), sa conception oriente objet et sa sim-
plicit. Ces caractristiques rendent possible la cration des applets. De plus, elles font de Java
un langage excellent pour lcriture de programmes plus gnraux, sexcutant sans navigateur
compatible Java. Pour les distinguer des applets, ces programmes sont appels applications.
A la n du chapitre, vous avez labor une applet et une application. Leurs diffrences ont ainsi
t mises en vidence. La compilation et lcriture de programmes Java ont t traites, ainsi
que linsertion dapplets dans une page Web. Vous avez ainsi acquis les bases ncessaires la
conception dapplications ou dapplets plus complexes.
Questions rponses
Q Je connais bien HTML et peu la programmation. Puis-je, malgr cela, crire des
programmes Java ?
R Sans exprience de programmation, programmer en Java va vous sembler nettement plus
difcile quen HTML. Mais pour apprendre programmer, Java est un bon langage. Etudiez
consciencieusement tous les exemples et les exercices de ce livre pour commencer utiliser
Java.
Q Quel est le rapport entre JavaScript et Java ?
R Une erreur courante dans le monde du Web consiste prter ces deux entits plus de points
communs quelles nen ont en ralit. Java est un langage de programmation, rpondant
des besoins multiples ; vous pouvez lutiliser pour crer des applets. JavaScript est un
langage de script invent par Netscape, qui ressemble Java ; il permet de faire diffrentes
choses astucieuses dans le cadre des pages Web. Ce sont des langages indpendants, conus
pour des objectifs diffrents. Si la programmation en JavaScript vous intresse, procurez-
vous un autre ouvrage, consacr JavaScript.
Q La distinction entre Java 1.02 et Java 1.1 est une cause de perplexit. Cet ouvrage est
cens tre consacr Java 1.1, mais selon vous, la version 1.02 est plus rpandue, et trs
peu de navigateurs supportent 1.1. Quelle version dois-je utiliser ?
part 01 Page 34 lundi 1 dcembre 1997 10:05
35
L E P R O G R A M M E U R
R Nous vivons une priode de transition entre la version 1.02, plus rpandue, et la nouvelle
version. La version 1.1 sera beaucoup plus largement supporte lavenir, et les raisons
dhsiter entre les deux sattnueront.
En rgle gnrale, si vous crivez du code conforme lAPI 1.02, il marchera nimporte
o, mme avec la version 1.1 du JDK. Mais si vous utilisez des fonctions de la version 1.1,
vous limitez la porte de votre code, puisquil ne pourra tre compil et excut que dans
un environnement 1.1. Selon lusage que vous voulez faire de Java, il vous appartient de
dcider si vous voulez ou non utiliser les nouveauts 1.1. (Dans le cas des applets, il vaut
probablement mieux en rester 1.02 pour le moment. Dans le cas des applications, vous
disposez dune plus grande latitude.)
Ce problme ne doit pas vous troubler outre mesure au stade actuel de la lecture du livre.
Pour la plupart, les fonctions de base de Java sont rigoureusement les mmes entre les deux
versions ; les diffrences ne prendront de limportance que lorsque nous plongerons plus
profond dans le JDK. Les fonctions propres 1.1 seront signales au fur et mesure de leur
apparition.
Q Selon ce premier chapitre, un navigateur compatible Java tel que Netscape tlcharge
les applets pour excution sur le systme de lutilisateur. Quen est-il de la scurit ?
Quest-ce qui empche quelquun dcrire une applet compromettant la scurit de
mon systme ou y causant des dommages ?
R Lquipe Java de Sun sest penche sur les problmes de scurit lis aux applets dans les
programmes de navigation compatibles Java. Plusieurs contrles existent pour que les
applets ne causent aucun dgt :
G Les applets Java ne peuvent ni lire ni crire sur le disque du systme local.
G Les applets Java ne peuvent pas excuter un programme sur le systme local.
G Les applets Java ne peuvent pas se connecter une machine du Web, lexception du
serveur partir duquel elles ont t tlcharges
Notez que certaines de ces restrictions peuvent ne pas jouer pour certains navigateurs, ou
tre leves. Attendez-vous nanmoins ce quaucune des possibilits en question ne soit
autorise.
En outre, le compilateur et linterprteur vrient le code source et le pseudo-code. Ils
dtectent ainsi les coups sournois du programmeur, par exemple, dpasser la limite de la
mmoire tampon ou dune pile.
Ces contrles ne suppriment pas tous les problmes de scurit (ce quaucun systme nest
en mesure de faire !), mais rduisent beaucoup les risques de tomber sur une applet malfai-
sante. Les questions de scurit des applets sont abordes au Chapitre 8, et de faon plus
dtaille au Chapitre 21.
Q Ce chapitre mentionne Solaris, Windows et Macintosh. Et les autres systmes
dexploitation ?
part 01 Page 35 lundi 1 dcembre 1997 10:05
Introduction la programmation Java 1.1
Java 1.1 36
1
R Si vous utilisez une autre version dUNIX que Solaris, il y a de bonnes chances pour que le
JDK ait t port sur votre systme. Voici quelques exemples :
G La version SGI du JDK peut tre obtenue http://www.sgi.com/Products/cosmo/cosmo
instructions.html.
G Des informations sur Java pour Linux sont disponibles http://www.blackdown.org/
java-linux/.
G IBM a port le JDK sur OS/2 et AIX. Renseignez-vous de manire plus prcise http:
//www.ncc.hurley.ibm.com/javainfo/.
G OSF porte le JDK sur HP/UX, Unixware, Sony NEWS, et lUNIX de Digital. Voir http:
//www.osf.org/mall/web/javaport.htm.
(Merci Elliot Rusty Harold pour ces informations extraites des rponses aux questions
frquemment poses (FAQ) http://www.sunsite.unc.edu/javafaq/javafaq/html.)
Q Jutilise le bloc-notes sur Windows pour prparer mes chiers Java. Le programme
insiste pour ajouter une extension .txt tous mes chiers, quelle que soit la faon dont
je les nomme (de sorte que jobtiens toujours des chiers tels que HelloWorld.java
.txt). Sauf les renommer avant chaque compilation, comment puis-je rgler ce
problme ?
R La solution consistant renommer les chiers reprsente une contrainte dsagrable,
notamment si vous avez de nombreux chiers. La difcult provient de ce que Windows ne
comprend pas lextension .java (lextension .html du HTML soulve les mmes dif-
cults).
Pour rgler cette question, allez dans une fentre de lexplorateur Windows, choisissez
Afchage | Options | Types de chiers. Dans la bote de dialogue qui apparat alors, choi-
sissez Nouveau type. Entrez Fichiers source Java dans la zone de texte Description du
type, et .java dans la zone de texte Extension associe. Puis, cliquez sur OK. Faites de
mme pour les chiers HTML si ncessaire, et cliquez de nouveau sur OK. Vous devez
pouvoir utiliser dsormais le bloc-notes (ou tout autre diteur de texte) pour crer et sauve-
garder des chiers Java et HTML.
Une mthode plus simple, mais quil faut se rappeler chaque fois, consiste sauvegarder
les chiers en plaant des doubles guillemets de part et dautre du nom de chier ; par
exemple, "HelloWorld.java".
Q O puis-je apprendre davantage de choses sur Java et trouver des applets et des appli-
cations pour jouer avec ?
R Vous pouvez dj nir de lire ce livre ! Voici dautres endroits o vous trouverez des infor-
mations sur Java et sur les applets Java :
G La page daccueil Java, http://www.Java.sun.com/ est la source ofcielle des infor-
mations sur Java, y compris les informations sur le JDK, sur la prochaine diffusion 1.1,
part 01 Page 36 lundi 1 dcembre 1997 10:05
37
L E P R O G R A M M E U R
et sur des outils de dveloppement tels que Java Workshop. Vous y trouverez galement
une documentation bien toffe.
G Gamelan, http://www.gamelan.com/, est une source dinformations sur les applets et
sur Java, organise par catgories. Pour jouer avec des applets et des applications, cest
ici quil convient de vous adresser.
G Pour toute discussion sur Java, consultez le newsgroup comp.lang.java, et notamment
comp.lang.java.programmer, comp.lang.java.tech, comp.lang.java.advocacy, etc.
(Pour accder ces newsgroups, vous avez besoin dun lecteur de news Usenet.)
part 01 Page 37 lundi 1 dcembre 1997 10:05
L E P R O G R A M M E U R
2
2
Programmation
oriente objet
et Java
part 01 Page 39 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 40
2
La programmation oriente objet (POO) est lune des plus importantes innovations de ces der-
nires annes en matire de programmation, et son ampleur pourrait vous faire redouter de met-
tre des annes pour apprendre ses mthodologies et proter de ses avantages par rapport aux
mthodes traditionnelles. En fait, les mthodes de la POO rpondent toutes une organisation
des programmes proche de la ralit.
Ce chapitre traite des concepts de programmation oriente objet de Java et de leur mise en
uvre. Il aborde aussi la structuration des programmes :
G La dnition des classes, des objets et de leurs relations
G Les parties essentielles dune classe ou dun objet : les comportements et les attributs
G Lhritage des classes et son inuence sur la conception des programmes
G Quelques informations sur les packages et les interfaces
Penser en termes dobjets : lanalogie
Les Lego ont des similitudes avec la POO. Ce sont de petits blocs de construction en plastique,
de tailles et de couleurs variables, qui sencastrent les uns dans les autres. De leur assemblage
naissent diffrents objets plus volumineux. Plusieurs pices (roues, moteur, charnire) permet-
tent de crer des chteaux, des automobiles, des robots gants, etc. Lassemblage des Lego est
dtermin par leur forme. Chaque pice a un rle dans la construction dun objet plus grand.
Cest peu prs de cette faon que fonctionne la programmation oriente objet : assembler de
petits lments pour en construire de plus grands.
Un autre exemple : la fabrication dun ordinateur complet partir de divers composants : une
carte mre, un disque dur, un clavier, etc. Le systme nal rsulte de lassemblage de toutes les
units.
Chaque composant interne est particulier de par sa complexit, son origine (constructeur) et sa
conception. Son fonctionnement spcique prsente peu dintrt, seul le rsultat compte : un
appui sur la touche A provoque lafchage du caractre A lcran. Chaque composant est une
unit indpendante et son seul intrt rside dans son interaction avec les autres composants.
Cette carte vido sadapte-t-elle dans un slot de la carte mre ? Cet cran est-il compatible avec
la carte vido ? Les composants dialoguent-ils correctement entre eux pour permettre aux dif-
frentes parties de converser ? Connatre la nature des interactions entre les diffrents compo-
sants et pouvoir les mettre en uvre facilite lassemblage complet du systme.
La programmation oriente objet fonctionne de la mme faon. Ainsi, ce type de programme
est constitu de plusieurs composants (objets) autonomes. Ils ont un rle spcique et dialo-
guent de faon prtablie.
part 01 Page 40 lundi 1 dcembre 1997 10:05
41
L E P R O G R A M M E U R
Objets et classes
La programmation oriente objet est base sur ce principe. Dans la ralit, des objets en consti-
tuent dautres plus grands. Ce procd de combinaisons nest toutefois quun aspect trs gnral
de la POO. La programmation oriente objet prsente plusieurs autres concepts et caractristi-
ques, qui facilitent et assouplissent la cration et lutilisation des objets. Les classes en sont les
lments les plus importants.
Lcriture dun programme dans un langage POO ne dnit pas des objets rels, mais des clas-
ses dobjets, une classe tant un modle applicable de multiples objets ayant des caractristi-
ques similaires. Une classe dcrit toutes les caractristiques communes un ensemble dobjets.
Par exemple, une classe Arbre peut dcrire les caractristiques de tous les arbres (possdent des
feuilles et des racines, poussent, fabriquent de la chlorophylle). Elle sert alors de modle abstrait
pour le concept darbre. Pour la slectionner, dialoguer avec elle ou labattre, il faut avoir une
instance de cet arbre. Bien sr, il est possible de crer de nombreuses instances dune classe
darbres dtermine. Chacune delles a ventuellement des caractristiques diffrentes (court,
haut, touffu, perd ses feuilles en automne), mme si elles se ressemblent et sont identiables en
tant quarbre (voir Figure 2.1).
Arbre
Classe Arbre
(abstrait)
Arbre
Arbre
Arbre
Figure 2.1
La classe Arbre et plusieurs
instances dArbre.
part 01 Page 41 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 42
2
Une classe est un modle commun un ensemble dobjets de mmes caractristiques.
Une instance de classe est lautre nom dun objet rel. Si les classes sont une reprsentation abs-
traite dun objet, une instance en est une reprsentation concrte.
Il ny a donc aucune diffrence entre une instance de classe et un objet. Le terme objet est plus
gnral mais ils sont tous deux une reprsentation concrte dune classe. Les termes dinstance
et dobjet sutilisent indiffremment en langage de POO. Une instance arbre et un objet arbre
reprsentent la mme chose.
Une instance est une manifestation concrte dune classe.
Voici un exemple proche de la programmation Java : la cration dune classe pour un bouton de
linterface utilisateur. La classe Button dnit les caractristiques dun bouton (son nom, sa
taille, son aspect) et son comportement (faut-il un simple ou un double-clic pour lactiver, que
fait-il quand il est activ ?). Aprs la dnition de la classe Button, la cration de ses instances
est aise (donc des objets bouton). Leurs caractristiques de base sont dnies dans la classe,
mais leur aspect et leur comportement diffrent ventuellement. Ce dernier est fonction des
besoins. Avec une classe Button, la rcriture du code pour chaque bouton nest pas obligatoire.
La classe Button est utile pour crer diffrents types de boutons dans ce programme ou dans un
autre.
Dans le langage C, la classe sassimile la cration dun nouveau type de donne avec struct
et typedef. Les classes fournissent plus quune simple collection de donnes. Ceci est illustr
dans la suite du chapitre.
Lcriture dun programme Java ncessite la conception et la construction de plusieurs classes.
Ainsi, les programmes sexcutent, des instances de ces classes se crent et seffacent au fur et
mesure des besoins. Le travail dun programmeur Java est de crer le bon ensemble de classes
pour que les programmes puissent fonctionner correctement.
En guise daide, lenvironnement Java offre un ensemble standard de classes (une bibliothque
de classes) couvrant un grand nombre de comportements de base. Ce sont des tches de pro-
grammation classiques (des classes pour des fonctions mathmatiques de base, des tableaux,
des chanes de caractres, etc.) mais aussi des comportements graphiques ou de gestion de
rseaux. Souvent, les bibliothques de classes Java rduisent lapport du programmeur la cra-
tion dune classe unique utilisant les bibliothques standard. Pour les programmes Java comple-
xes, il faut crer un ensemble complet de classes. Celles-ci dialoguent alors selon des rgles
dnies.
Une bibliothque de classes est un collection de classes susceptibles dtre utilises de faon
rptive dans diffrents programmes. Les bibliothques de classes standard de Java comportent
un nombre important de classes relatives aux tches de base en Java.
Lexique
Lexique
Astuce
Lexique
part 01 Page 42 lundi 1 dcembre 1997 10:05
43
L E P R O G R A M M E U R
Attributs et comportement
Chaque classe crite en Java se compose gnralement de deux parties : les attributs et le com-
portement. Dans cette section, une classe thorique simple appele Motorcycle permet de les
tudier. Ensuite, le code Java met en uvre la reprsentation dune moto.
Attributs
Les attributs sont les caractristiques individuelles qui diffrencient un objet dun autre. Ils en
dnissent lapparence, ltat et les autres qualits. Soit une classe thorique appele Motorcycle
avec les attributs suivants :
G couleur : rouge, vert, gris, brun
G style : patrouille, sport, standard
G marque : Honda, BMW, Bultaco
Les attributs dun objet peuvent aussi inclure des informations sur son tat, telles que ltat du
moteur (en marche ou larrt), ou la vitesse slectionne.
Les attributs sont dnis dans les classes par des variables. Les types et les noms de ces varia-
bles sont dnis dans la classe. Chaque objet dune classe pouvant avoir des valeurs diffrentes
pour ses variables, on utilise le terme variable dinstance pour dsigner la variable dun objet.
Une variable dinstance dnit un attribut dun objet. Les types et les noms des variables sont
dnis dans la classe, mais leurs valeurs sont xes et modies dans lobjet.
Les variables dinstance peuvent tre initialises la cration dun objet et demeurer constantes
pendant toute la vie de lobjet, ou tre changes au cours du droulement du programme. La
modication des valeurs des variables entrane celle des attributs de lobjet.
Aux variables dinstance viennent sajouter des variables de classe. Ces dernires sappliquent
la classe elle-mme et tous ses objets. Les valeurs des variables dinstance sont stockes dans
linstance. Les valeurs des variables de classe sont stockes dans la classe elle-mme. Le cha-
pitre suivant tudie les caractristiques des variables dinstance et de classe.
Comportement
Le comportement dune classe, cest la manire dont opre une instance de cette classe ; par
exemple, la faon dont elle ragit une demande dune autre classe ou dun autre objet, ou ce
quelle fait lorsque son tat interne se modie. Le comportement dun objet, cest sa faon de
faire quelque chose ou de lobtenir. A titre dexemple, voici quelques comportements de la
classe Motorcycle :
G Dmarrer le moteur
Lexique
part 01 Page 43 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 44
2
G Arrter le moteur
G Acclrer
G Changer de vitesse
G Caler
La dnition du comportement dun objet passe par la cration de mthodes, des ensembles
dinstructions Java excutant certaines tches. Elles ressemblent aux fonctions des autres lan-
gages, mais elles sont dnies dans une classe et accessibles seulement dans cette classe.
A linverse de C++, Java ne possde pas de fonctions dnies en dehors des classes.
Les mthodes sont des fonctions dnies dans les classes. Elles agissent sur les objets de ces
dernires.
Les mthodes peuvent oprer sur un seul objet individuel, ou encore permettre des objets de
communiquer entre eux. Une classe ou un objet peut appeler les mthodes dune autre classe ou
dun objet diffrent, pour signaler des modications denvironnement ou demander cet autre
objet de changer dtat.
De mme quil existe des variables de classe et des variables dinstance, il existe aussi des
mthodes dinstance et des mthodes de classe. Les mthodes dinstance (appeles simplement
mthodes) agissent sur un objet. Les mthodes de classe agissent sur une classe (ou sur dautres
objets). Ces dernires sont traites en dtail dans les prochains chapitres.
Cration dune classe
Cette section est une application de la thorie tudie jusque-l. La cration de la classe Motor-
cycle montre comment dfinir les mthodes et les variables dinstance dans une classe. Vient
ensuite lapplication Java pour crer un nouvel objet de la classe Motorcycle et en afcher les
variables dinstance.
Nous laissons de ct ltude dtaille de la syntaxe, qui compliquerait la comprhension de
lexemple, et qui de toute faon deviendra beaucoup plus vidente au cours des chapitres sui-
vants. Pour le moment, limportant est de comprendre les structures de base de la dnition de
classe.
Saisissez les lignes suivantes avec votre diteur, en respectant la casse. Il sagit dune dnition
de classe basique.
class Motorcycle {
}
Vous venez de crer une classe, mme si elle ne ralise pas grand-chose pour le moment. Cest
une classe Java dans sa version la plus simple.
Lexique
Info
part 01 Page 44 lundi 1 dcembre 1997 10:05
45
L E P R O G R A M M E U R
Ajoutez les trois lignes suivantes juste sous la premire, an de crer des variables dinstance
pour cette classe :
String make;
String color;
boolean engineState;
Parmi les trois variables dinstance de lexemple, make et color contiennent des objets String
(un String est un chane de caractres ; String scrit avec un S majuscule et fait partie de la
bibliothque de classes standard mentionne prcdemment). La troisime, engineState, est
une variable boolenne et indique si le moteur est en marche ou larrt ; la valeur false veut
dire que le moteur est arrt, et true veut dire quil tourne. Notez que boolean scrit avec un b
minuscule. Une variable boolenne ne peut prendre que lune des deux valeurs true ou false.
Dans le langage Java, boolean est un vritable type de donnes. Il accepte les valeurs true ou
false. A linverse de leurs homologues en langage C, les donnes boolennes en Java ne sont
pas des nombres.
Les comportements (mthodes) de la classe moto peuvent tre nombreux, mais lexemple se
limite un seul : une mthode qui dmarre le moteur. Ajoutez maintenant les lignes suivantes
sous les variables dinstance dans votre dnition de classe :
void startEngine() {
if (engineState == true)
System.out.println("The engine is already on.");
else {
engineState = true;
System.out.println("The engine is now on.");
}
}
La mthode startEngine teste le moteur pour savoir sil tourne dj (ligne engineState ==
true). Si cest le cas, elle affiche un message qui lindique. Si le moteur est larrt, elle change
son tat en true (mettant le moteur en marche), puis afche le message de dmarrage du moteur.
Enn, la mthode startEngine() ne retournant pas de valeur, sa dnition commence par le
mot void. (On peut aussi dnir des mthodes qui retournent des valeurs ; ce sera lun des th-
mes du Chapitre 6.)
Ici et tout au long de louvrage, nous ajoutons systmatiquement des parenthse vides la suite
du nom dune mthode laquelle il est fait rfrence (par exemple, la mthode startEngine()
du paragraphe prcdent). Cest une convention adopte par la communaut des program-
meurs pour indiquer quil sagit dune mthode et non dune variable.
Info
Info
part 01 Page 45 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 46
2
Sauvegardez le programme dans un chier appel Motorcycle.java (les chiers doivent avoir
le mme nom que la classe quils dnissent). Le Listing 2.1 montre laspect du programme au
stade actuel :
Listing 2.1. Le chier Motorcycle.java
1 : class Motorcycle {
2 :
3 : String make;
4 : String color;
5 : boolean engineState = false;
6 :
7 : void startEngine() {
8 : if (engineState == true)
9 : System.out.println("The engine is already on.");
10 : else {
11 : engineState = true;
12 : System.out.println("The engine is now on.");
13 : }
14 : : }
15 : }
Le compilateur Java ne tient pas compte de lindentation des diffrentes parties de la classe.
Lutilisation dune indentation particulire permet cependant de relire plus facilement la d-
nition de classe. Celle de lexemple (variables et mthodes dcales de la dnition de la
classe) est conserve dans tout le livre. Les bibliothques de classes Java utilisent une indenta-
tion similaire. Le choix de lindentation appartient au programmeur.
Avant de compiler cette classe, ajoutez la mthode showAtts, sous la mthode startEngine
(entre les lignes 14 et 15). Elle afche les valeurs courantes de toutes les variables dinstance
dans une instance de la classe Motorcycle. Voici cette mthode :
void showAtts() {
System.out.println("This motorcycle is a"
+ color + " " + make);
if (engineState == true)
System.out.println("The engine is on.");
else System.out.println("The engine is off.");
}
La mthode showAtts afche deux lignes lcran : make et color de lobjet motorcycle et ltat
du moteur.
Vous avez cr ainsi une classe Java comportant trois variables dinstance et deux mthodes
dnies.
Astuce
part 01 Page 46 lundi 1 dcembre 1997 10:05
47
L E P R O G R A M M E U R
Sauvegardez de nouveau ce chier et compilez-le par lune des mthodes suivantes :
Aprs cet exemple, les mcanismes de compilation et dexcution des programmes Java seront
considrs comme acquis, et ne seront plus dcrits.
Depuis un shell DOS, faites un CD vers le rpertoire contenant votre chier source Java, et utilisez
la commande javac pour le compiler :
javac Motorcycle.java
Glissez et dposez le chier Motorcycle.java sur licne du compilateur Java.
Depuis une ligne de commande, faites un CD vers le rpertoire contenant votre chier source
Java, et utilisez la commande javac pour le compiler :
javac Motorcycle.java
Lorsque vous excutez ce petit programme en utilisant lun des programmes java ou Java Runner,
vous obtenez une erreur. Pourquoi ? Si vous excutez directement une classe qui vient dtre
compile, Java suppose quil sagit dune application et recherche une mthode main(). Comme
vous navez pas dni de mthode main() lintrieur de la classe, linterprteur Java produit
lun des deux messages derreur ci-aprs :
In class Motorcycle: void main(String argv[]) is not defined
Exception in thread "main": java.lang.UnknownError
Pour utiliser la classe Motorcycle (crer et manipuler des objets), il faut crire une applet ou une
application Java qui lutilise, ou lui ajouter une mthode main. La deuxime solution est la plus
simple (voir Listing 2.2). Cette mthode doit tre ajoute juste avant la dernire accolade de
fermeture (}), sous les mthodes startEngine() et showAtts().
Listing 2.2 Mthode main() pour Motorcycle.java
1 : public static void main (String args[]) {
2 : Motorcycle m = new Motorcycle();
3 : m.make = "Yamaha RZ350";
4 : m.color = "yellow";
5 : System.out.println("Calling showAtts...");
6 : m.showAtts();
7 : System.out.println("--------");
8 : System.out.println("Starting engine...");
9 : m.startEngine();
10: System.out.println("--------");
11: System.out.println("Calling showAtts...");
12: m.showAtts();
13: System.out.println("--------");
14: System.out.println("Starting engine...");
15: m.startEngine();
16:}
Info
part 01 Page 47 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 48
2
Grce la mthode main(), la classe Motorcycle devient une application ofcielle. La compi-
lation est alors possible sans message derreur. Le rsultat de lexcution est le suivant :
Calling showAtts...
This motorcycle is a yellow Yamaha RZ350
The engine is off.
--------
Starting engine...
The engine is on.
--------
Calling showAtts...
This motorcycle is a yellow Yamaha RZ350
The engine is now on.
--------
Starting engine...
The engine is already on.
La mthode main() comportant beaucoup dlments nouveaux, voici, ligne par ligne, lindica-
tion de ce quelle ralise (les deux chapitres suivants donnent des dtails plus spciques).
La premire ligne dclare la mthode main(). Elle prend toujours cette forme. Chacune de ses
parties sera tudie dans les chapitres suivants.
La ligne 2 cre un nouvel objet Motorcycle et stocke sa rfrence dans la variable m. Il est rare
dagir directement sur les classes dans les programmes Java. Au lieu de cela, on cre des objets,
puis on appelle des mthodes pour ces objets.
Les lignes 3 et 4 mettent en place les variables dinstance de lobjet Motorcycle. La marque est
maintenant Yamaha RZ350 et la couleur yellow.
La ligne 5 imprime un message pour annoncer lappel de la mthode ShowAtts, puis la ligne 6
appelle cette mthode, qui a t dnie dans lobjet Motorcycle. Le nouvel objet Motorcycle
afche alors la valeur de ses variables dinstance (make et color renseignes prcdemment) et
signale larrt du moteur.
La ligne 7 afche une ligne de sparation pour une lecture plus facile.
La ligne 9 appelle la mthode startEngine() dans lobjet motorcycle pour dmarrer le moteur.
Son tat change alors : il tourne.
La ligne 12 afche nouveau la valeur des variables dinstance. Cette fois, le message signale
que le moteur tourne.
La ligne 15 essaye de dmarrer nouveau le moteur. Puisquil tourne dj, cette tentative pro-
voque lafchage du message The engine is already on.
Le Listing 2.3 montre la version nale de la classe Motorcycle, telle quelle doit pouvoir tre
compile et excute sans problme. Noubliez pas que cet exemple, comme tous les autres
exemples du livre, est inclus dans le CD-ROM fourni avec louvrage.
Analyse
part 01 Page 48 lundi 1 dcembre 1997 10:05
49
L E P R O G R A M M E U R
Listing 2.3. La version nale de Motorcycle Java
1: class Motorcycle {
2:
3: String make;
4: String color;
5: boolean engineState;
6:
7: void startEngine() {
8: if (engineState == true)
9: System.out.println("The engine is already on.");
10: else {
11: engineState = true;
12: System.out.println("The engine is now on.");
13: }
14: }
15:
16: void showAtts() {
17: System.out.println("This motorcycle is a "
18: + color + " " + make);
19: if (engineState == true)
20: System.out.println("The engine is on.");
21: else System.out.println("The engine is off.");
22: }
23:
24: public static void main (String args[]) {
25: Motorcycle m = new Motorcycle();
26: m.make = "Yamaha RZ350";
27: m.color = "yellow";
28: System.out.println("Calling showAtts...");
29: m.showAtts();
30: System.out.println("------");
31: System.out.println("Starting engine...");
32: m.startEngine();
33: System.out.println("------");
34: System.out.println("Calling showAtts...");
35: m.showAtts();
36: System.out.println("------");
37: System.out.println("Starting engine...");
38: m.startEngine();
39: }
40:}
Hritage, interfaces et packages
Vous tes dsormais familiaris avec les classes, les objets, les mthodes et les variables, et vous
savez les runir dans un programme Java. Lhritage, les interfaces et les packages sont des
mcanismes dorganisation des classes et de leurs comportements. Les bibliothques de classes
part 01 Page 49 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 50
2
Java utilisent tous ces concepts. La cration de bonnes bibliothques de classes pour les pro-
grammes passe par lutilisation de ces mmes concepts.
Hritage
Lhritage est essentiel pour la programmation oriente objet et inuence directement la concep-
tion et lcriture des classes Java. Lhritage est un mcanisme puissant qui facilite lcriture
dune classe. En effet, il suft de spcier les diffrences de cette classe par rapport une autre ;
lhritage donne un accs automatique toute linformation contenue dans cette autre classe.
Avec lhritage, toutes les classes (crites ou issues dautres bibliothques de classes ainsi que
les classes utilitaires standard) suivent une hirarchie stricte (voir Figure 2.2).
Chaque classe possde une super-classe (la classe situe au-dessus dans la hirarchie) et ven-
tuellement une ou plusieurs sous-classes (les classes situes au-dessous dans la hirarchie). Les
classes hritent de celles qui sont situes au-dessus delles dans la hirarchie.
Les sous-classes hritent de toutes les mthodes et variables de leurs super-classes. Ainsi, si une
super-classe dnit un comportement utile une classe, il nest pas ncessaire de rednir cette
dernire ou de copier ce code partir dune autre classe. En effet, la classe rcupre automati-
quement le comportement partir de sa super-classe, et ainsi de suite jusquau sommet de la
hirarchie. Une classe devient alors une combinaison de toutes les caractristiques des classes
dont elle hrite.
La classe A est la super-classe de B
La classe B est une sous-classe de A
La classe B est la super-classe
de C, D et E
Les classes C, D et E sont des
sous-classes de B
Classe A
Classe B
Classe D Classe C Classe E
Figure 2.2
Une hirarchie
de classes.
part 01 Page 50 lundi 1 dcembre 1997 10:05
51
L E P R O G R A M M E U R
Lhritage est un concept de la programmation oriente objet, selon lequel toutes les classes
font partie dune hirarchie stricte. Chaque classe possde des super-classes (les classes
situes au-dessus dans la hirarchie), et un nombre quelconque de sous-classes (les classes
situes au-dessous dans la hirarchie). Les sous-classes hrites des attributs et des comporte-
ments de leurs super-classes.
La classe Object se trouve au sommet de la hirarchie des classes Java. Toutes les classes hri-
tent de cette super-classe. Cest la classe la plus gnrale de la hirarchie. Elle dnit le com-
portement spcique tous les objets dans Java. Chaque classe situe un niveau plus bas dans
la hirarchie ajoute des informations supplmentaires. Aussi, plus elles sont basses dans la hi-
rarchie, plus leur usage est spcique. Ainsi, la hirarchie de classe est un ensemble de concepts.
Ils sont trs abstraits au sommet, mais deviennent concrets quand on descend dans la chane des
super-classes.
Il est souvent ncessaire de crer une classe qui possde non seulement toutes les informations
dune autre classe, mais galement des caractristiques complmentaires. Par exemple, vous
pouvez vouloir crer une version de Button possdant une tiquette spcique. Pour rcuprer
toutes les informations Button, il suft de dnir une classe qui en hrite. La classe rcupre
alors tous les comportements dnis dans Button (et dans les super-classes de Button). Ensuite,
il reste grer les diffrences entre cette classe et Button. Ce mcanisme, qui consiste dnir
de nouvelles classes en fonction de leurs diffrences avec leurs super-classes, sappelle sous-
classement.
Le sous-classement concerne la cration dune classe qui hrite dautres classes de la hirarchie.
Avec le sous-classement, il suft de dnir les diffrences entre la classe et ses parents. Les
comportements complmentaires sont tous disponibles pour la classe grce lhritage.
Le sous-classement revient dnir une nouvelle classe hritire dune classe qui existe dj.
Si la classe dnit compltement un nouveau comportement et si elle nest pas une vritable
sous-classe, elle peut hriter directement de la classe Object, ce qui lui permet de sintgrer elle
aussi la hirarchie des classes Java. En fait, la dnition dune classe sans super-classe en pre-
mire ligne amne Java supposer quelle hrite de la classe Object. La classe Motorcycle cre
dans la section prcdente hrite ainsi de la classe Object.
Cration dune hirarchie de classes
Lorsquun trs grand nombre de classes sont cres, dans le cas dun programme trs complexe,
il est logique de penser quelles forment une hirarchie. Elles hritent ainsi de la hirarchie de
classes et peuvent elles-mmes former une hirarchie. Crer une hirarchie ncessite une orga-
nisation pralable du code Java. Cet effort supplmentaire est rcompens par de prcieux
avantages :
Lexique
Lexique
part 01 Page 51 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 52
2
G Le dveloppement des classes dans une hirarchie permet de placer les informations com-
munes de nombreuses classes dans des super-classes. Lutilisation rpte de ces informa-
tions est ensuite possible. En fait, chaque sous-classe obtient ces informations communes
par le mcanisme de lhritage.
G Le changement (ou linsertion) dune classe dans le haut de la hirarchie modie automati-
quement le comportement de ses sous-classes. En effet, ces dernires obtiennent les nouvel-
les informations par hritage et non par recopie du code, de sorte quil nest pas ncessaire
de les modier et de les recompiler.
Soit la classe Motorcycle de lexemple prcdent et un programme qui met en uvre toutes les
caractristiques dune moto. Il sexcute alors correctement, tout fonctionne. Il savre ensuite
ncessaire de crer une classe Car. Car et Motorcycle ont beaucoup de points communs : lune
et lautre comprennent des vhicules ms par des moteurs, possdant des transmissions, des
phares et des compteurs. Une premire raction consisterait ouvrir la classe Motorcycle et
copier dans la nouvelle classe Car une bonne partie des informations dj dnies.
La meilleure solution est de placer les informations communes Car et Motorcycle dans une
hirarchie de classes plus gnrale. Le travail de modication des classes Car et Motorcycle est
important. A linverse, lajout des classes Bicycle, Scooter, Truck, etc., en ncessite peu. En
effet, le comportement commun dni dans la super-classe le rduit de faon signicative.
Voici une conception de hirarchie de classes conforme ce principe. Au sommet se trouve la
classe Object, racine de toutes les classes Java. La classe la plus gnrale commune Car et
Motorcycle se nomme Vehicle. Un vhicule (vehicle) est un moyen de transport dun endroit
un autre. Le seul comportement dni dans la classe Vehicle est le transport dun point a vers
un point b.
Pourquoi ne pas mettre ensuite sous la classe Vehicle les deux classes suivantes : Person-
PoweredVehicle et EnginePoweredVehicle. EnginePoweredVehicle est diffrente de Vehicle
tout court, cause du moteur, auquel sont associs des comportements. Ces comportements
peuvent tre le dmarrage et larrt du moteur, la rserve en essence et huile, et aussi la vitesse
de rotation du moteur. Les vhicules sans moteur (PersonPoweredVehicle) ont eux aussi leur
comportement propre. Par exemple, ils transforment lnergie humaine pour dplacer le vhi-
cule (pdales). La Figure 2.3 illustre tout ceci.
Lajout dautres classes apporte une plus grande prcision : Motorcycle, Car, Truck, etc. Liso-
lement de certains comportements dans des classes intermdiaires est galement possible.
Ainsi, les classes TwoWheeled et FourWheeled peuvent possder diffrents comportements des
vhicules deux ou quatre roues (voir Figure 2.4).
Enn, partir de la sous-classe des deux-roues moteur, on peut dnir la classe des motos,
Motorcycle. On peut dfinir aussi une classe pour les scooters ou une autre pour les mobylettes.
En effet, ce sont aussi des vhicules moteur deux roues, mais avec des caractristiques dif-
frentes de celles des motos.
part 01 Page 52 lundi 1 dcembre 1997 10:05
53
L E P R O G R A M M E U R
O placer des caractristiques comme la marque ou la couleur ? L o elles sintgrent le mieux
dans la hirarchie de classes. Par exemple, dans la classe Vehicle pour que toutes les sous-
classes puissent y accder. Une caractristique ou un comportement doit tre dni une seule
fois dans la hirarchie. Les sous-classes les utilisent ensuite automatiquement.
Fonctionnement de lhritage
Comment fonctionne lhritage ? Comment des instances de classe accdent-elles automatique-
ment aux mthodes et variables des classes situes au-dessus dans la hirarchie ?
Pour les variables dinstance, lorsque vous crez un nouvel objet dans une classe, un emplacement
est attribu chaque variable dnie dans la classe courante et dans toutes ses super-classes.
Ainsi, la combinaison de toutes les classes constitue un modle de lobjet courant. De plus,
chaque objet apporte linformation approprie sa situation.
Objet
Vhicule
Vhicule moteur Vhicule sans moteur
Figure 2.3
Hirarchie de base
des vhicules.
Deux-roues
Vhicule moteur
Quatre-roues
Vhicule moteur
Vhicule moteur
Moto Scooter Mobylette
Figure 2.4
Vhicules deux
et quatre roues.
part 01 Page 53 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 54
2
Les mthodes oprent de manire similaire. Ainsi, les nouveaux objets ont accs tous les noms
de mthodes de leur classe et de leurs super-classes. Par contre, les dnitions de mthodes sont
choisies dynamiquement au moment de lappel. Si lappel porte sur un objet particulier, Java
commence par chercher la dnition de la mthode dans la classe de lobjet. Sil ne la trouve
pas, il poursuit sa recherche dans la super-classe et ainsi de suite (voir Figure 2.5).
Les choses se compliquent lorsque deux mthodes dnies dans une sous-classe et une super-
classe ont la mme signature (nom, nombre et types darguments). Dans ce cas, Java excute la
premire dnition trouve (du bas de la hirarchie vers le haut). Ce mcanisme permet de d-
nir dans une sous-classe une mthode ayant la signature dune mthode de lune de ses super-
classes, et ainsi de masquer cette dernire. On dit que la mthode a t rednie. La rednition
est tudie plus en dtail au Chapitre 7.
La rednition consiste crer dans une sous-classe une mthode dont la signature (nom, nom-
bre et type darguments) est identique celle dune super-classe. La nouvelle mthode "masque"
alors celle de la super-classe (voir Figure 2.6).
Figure 2.5
Dtermination de
lendroit o se trouve
une mthode.
Classe Classe
Le message est envoy
l'objet puis transmis
la hirarchie de classe
j'usqu' ce qu'une dfinition
soit trouve
Dfinition de
la mthode
Classe Classe
Classe
Objet Objet
Lexique
part 01 Page 54 lundi 1 dcembre 1997 10:05
55
L E P R O G R A M M E U R
Hritage simple ou multiple
La forme dhritage tudie prcdemment sappelle hritage simple. Dans lhritage simple,
chaque classe Java a une seule super-classe (mme si une super-classe donne possde ven-
tuellement plusieurs sous-classes).
Dans les autres langages de programmation orients objet comme C++ ou Smalltalk, les classes
peuvent avoir plusieurs super-classes. Elles hritent alors de la combinaison des variables et
mthodes de toutes leurs super-classes. Cela sappelle lhritage multiple. Ce mcanisme puis-
sant permet aux classes davoir toutes sortes de comportements. Malheureusement, il compli-
que souvent la dnition des classes et le code. Pour ces raisons, Java se limite lhritage
simple.
Interfaces et packages
Il reste deux concepts de Java tudier dans ce chapitre : les packages et les interfaces. Ils per-
mettent la conception et la mise en uvre de groupes de classes et du comportement de ces clas-
ses. Le Chapitre 16 couvre plus en dtail les interfaces et les packages, mais il est utile de les
aborder ds prsent.
Chacune des classes Java a une super-classe et une seule. Elle hrite des mthodes et des varia-
bles de sa super-classe, et de toutes les super-classes situes au-dessus. Avec lhritage simple,
les relations entre les classes et leurs fonctions sont faciles comprendre et concevoir. Cepen-
dant, cela savre souvent restrictif. Cest le cas si lon veut mettre en uvre des comportements
Classe Classe
Le message est envoy
l'objet et transmis
la hirarchie des classes
j'usqu' ce qu'une dfinition
soit trouve (la premire)
La dfinition initiale est
remplace par celle de
la mthode polymorphe
Dfinition de
la mthode
initiale
Classe
Classe
Objet Objet
Figure 2.6
Redfinition
de mthodes.
part 01 Page 55 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 56
2
similaires sur diffrentes "branches" de la hirarchie des classes. Java rsout ce problme de
comportement partag grce au concept dinterface. Une interface permet de rassembler un
ensemble de noms de mthodes en un seul endroit, et dajouter ces mthodes en bloc des clas-
ses qui en ont besoin. Notez que les interfaces ne contiennent que les noms de mthodes et les
indications dinterface (par exemple les arguments), mais pas les dnitions des mthodes
concernes.
Bien quune classe Java possde une super-classe et une seule (hritage simple), elle peut impl-
menter un nombre quelconque dinterfaces. Limplmentation dune interface consiste dnir
des mthodes dont les noms gurent dans linterface. Ainsi, deux classes trs diffrentes peu-
vent rpondre aux mmes appels de mthodes mentionnes dans linterface implmente dans
les deux classes. Ces classes peuvent faire des choses trs diffrentes en rponse aux appels de
ces mthodes.
Une interface est une collection de noms de mthodes, sans dnitions, qui peut tre ajoute
des classes pour leur adjoindre des comportements non reprsents par les mthodes que la
classe a dnies elle-mme, ou dont elle a hrit de ses super-classes.
Ce chapitre ne va pas plus loin dans ltude des interfaces, qui sera reprise ultrieurement.
Abordons maintenant le concept des packages.
Les packages regroupent des classes et des interfaces ayant un rapport entre elles, dans une
seule collection ou bibliothque. Grce eux, les groupes de classes sont disponibles unique-
ment sils sont ncessaires, ce qui permet notamment dviter des conits entre noms de classes
de diffrents groupes.
La troisime partie de ce livre tudie les packages en dtail. Le prsent chapitre se limite aux
points suivants :
G Les bibliothques de classes du JDK sont dans le package java. Les classes de ce package
sont compatibles avec toutes les installations Java. La compatibilit nest assure que pour
ces seules classes. Le package java contient dautres packages dont les classes dnissent
le langage, les entres/sorties, la gestion de rseaux de base, les fonctions de fentrage, et
bien entendu les applets. Quand elles sont issues dautres packages (de Sun ou de Netscape),
les classes sutilisent uniquement avec des installations spciques.
G Par dfaut, les classes accdent seulement java.lang (le package du langage de base
fourni avec le package Java). Pour utiliser celles dun autre package, il faut les rfrencer
explicitement avec le nom du package ou les importer dans le chier source.
G Pour rfrencer une classe dun package, il faut spcier les noms des packages dans lesquels
elle se situe diffrents niveaux, et son nom, et sparer ces diffrents noms par un point (.).
Par exemple, la classe color, contenue dans le package awt (awt signie Abstract Windowing
Toolkit), lui-mme inclus dans le package java, est rfrence ainsi : java.awt.color.
Lexique
part 01 Page 56 lundi 1 dcembre 1997 10:05
57
L E P R O G R A M M E U R
Cration dune sous-classe
Pour terminer ce chapitre, vous allez crer une sous-classe dune autre classe et rednir des
mthodes. Cet exemple illustre en outre le fonctionnement des packages.
Un exemple typique de cration dune sous-classe est celui de la cration dune applet. Toutes
les applets sont des sous-classes de la classe Applet (incluse dans le package java.applet).
A la cration dune sous-classe dApplet, les comportements des outils de fentrage et les clas-
ses de mise en page sont rcuprs automatiquement. Ainsi, lapplet est dessine au bon endroit
dans la page et dialogue avec le systme, pour rpondre aux touches de fonction ou la souris
par exemple.
Dans cet exemple, lapplet est similaire celle du chapitre prcdent (Hello World), mais la
chane Hello est crite dans une couleur diffrente et une police plus grande. Pour commencer,
il faut construire la dnition de la classe. Depuis votre diteur de texte, saisissez la dnition
de classe suivante :
public class HelloAgainApplet extends java.applet.Applet {
}
La classe HelloAgainApplet est maintenant cre. Dans linstruction, extends java.applet
.Applet dfinit HelloAgainApplet comme une sous-classe de la classe Applet contenue dans le
package java.applet. Pour accder cette classe, il faut la rfrencer explicitement, cest--dire
indiquer son nom et celui de son package.
Le mot cl public rend la classe disponible pour tout le systme Java ds son chargement.
Public est gnralement utilis pour rendre une classe visible par toutes celles du programme
Java. Pour les applets, le mot cl public est obligatoire (les classes public sont traites dans la
troisime partie de ce livre).
Une dnition de classe vide (sans variables ni mthodes) na aucune utilit. Pour quune sous-
classe serve quelque chose, il faut lui ajouter des mthodes et des variables, ou rednir des
mthodes de sa super-classe. Ajoutez des informations cette classe, entre les deux accolades,
pour la diffrencier de sa super-classe.
Dans un premier temps, ajoutez-lui une variable dinstance contenant un objet Font :
Font f = new Font ("TimesRoman",Font.BOLD,36);
La variable dinstance f contient maintenant une nouvelle instance de la classe Font incluse
dans le package java.awt. Cet objet Font est la police de caractres Times Roman, gras, 36 points.
Dans lapplet Hello World prcdente, la police par dfaut Font utilise tait : 12 points, Times
Roman. Lutilisation dun objet Font permet de changer la police du texte crit par lapplet.
La variable dinstance cre pour contenir lobjet "Font" rend celui-ci accessible toutes les
mthodes de la classe. Crez maintenant une mthode qui lutilise.
part 01 Page 57 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 58
2
Une applet emploie plusieurs mthodes standard dj dnies dans ses super-classes, et qui sont
le plus souvent rednies dans la nouvelle classe applet. Cela concerne les mthodes dinitiali-
sation et de lancement de lapplet, mais aussi celles qui dirigent des oprations comme le mou-
vement et les clics de la souris, ou la libration des ressources en n dexcution. Une de ces
mthodes standard est paint(), qui afche lapplet sur lcran. La dnition par dfaut de
paint() ne fait rien, cest une mthode vide. En redfinissant paint(), on indique simplement
lapplet ce quelle doit afcher. Voici une dnition de paint() :
public void paint (Graphics g) {
g.setFont(f);
g.setColor(Color.red);
g.drawString("Hello again !", 5, 25);
}
En ce qui concerne la mthode paint(), deux notions sont retenir. En premier lieu, tout comme
lapplet, cette mthode est dclare public. Cependant, la raison est diffrente : la mthode
quelle rednit est elle-mme public. Si une mthode dune super-classe est dnie comme
public, une mthode qui la redfinit doit elle aussi tre public, sinon une erreur se produit la
compilation de la classe.
En second lieu, la mthode paint() reoit un seul argument : une instance de la classe Graphics.
Cette classe fournit des comportements indpendants de la plate-forme pour les polices, les cou-
leurs et les oprations de base de dessin de lignes et de formes. La deuxime partie de ce livre
tudie la classe Graphics au travers dapplets plus importantes.
Dans lexemple, la mthode paint() vous a permis de faire trois choses :
G Indiquer lobjet graphics la police utiliser par dfaut, celle contenue dans la variable f.
G Indiquer lobjet graphics la couleur par dfaut, une instance (red) de la classe Color :
G Afcher la chane "Hello Again !" lcran aux positions x et y suivantes : 5 et 25. Cette
chane apparat avec la nouvelle police et la nouvelle couleur.
Cela suft pour une applet aussi simple. Elle ressemble maintenant ceci :
public class HelloAgainApplet extends java.applet.Applet {
Font f = new Font ("TimesRoman",Font.BOLD,36);
public void paint (Graphics g) {
g.setFont(f);
g.setColor(Color.red);
g.drawString("Hello again !", 5, 50);
}
}
Cet exemple prsente une erreur. Pour en prendre connaissance, sauvegardez le chier sous le
nom de la classe HelloAgainApplet.java et compilez-le. Le compilateur Java envoie le message
derreur suivant :
HelloAgainApplet.java :7 :Class Graphics not found in type declaration.
part 01 Page 58 lundi 1 dcembre 1997 10:05
59
L E P R O G R A M M E U R
Ce message apparat parce que les classes rfrences dans lexemple font partie dun package
qui nest pas disponible par dfaut. Le seul package accessible automatiquement dans votre pro-
gramme Java est java.lang. Ainsi, la rfrence la classe Applet dans la premire ligne de la
dnition de classe indique le nom de son package complet (java.applet.Applet). Dans les
lignes suivantes, toutes les autres classes sont rfrences comme si elles taient dj disponi-
bles. Le compilateur sen aperoit et vous dit que vous navez pas accs ces autres classes.
Il existe deux mthodes pour rsoudre ce problme : rfrencer toutes les classes externes avec
le nom du package complet, ou importer la classe ou le package appropri en tte du chier
classe. Le choix importe peu, mais la seconde solution diminue le volume de code crire si
vous vous rfrez souvent des classes dun mme package.
Dans lexemple, importez les classes dont vous avez besoin. Elles sont au nombre de trois :
Graphics, Font et Color, et appartiennent au package java.awt. Pour les importer, placez les
codes suivants en tte du programme, avant la dnition de la classe :
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
Lastrisque (*) remplace le nom de la classe pour limportation dun package complet de
classes (public). Par exemple, pour importer toutes les classes du package awt, utilisez
linstruction suivante :
import java.awt.*;
Les classes sont maintenant correctement importes dans le programme. La compilation de
HelloAgainApplet doit alors seffectuer correctement. Le Listing 2.4 vous montre sa version
nale.
Listing 2.4. La version nale de HelloAgainApplet.java
1:import java.awt.Graphics;
2:import java.awt.Font;
3:import java.awt.Color;
4:
5:public class HelloAgainApplet extends java.applet.Applet {
6:
7: Font f = new Font("TimesRoman",Font.BOLD,36);
8:
9: public void paint(Graphics g) {
10: g.setFont(f);
11: g.setColor(Color.red);
12: g.drawString("Hello again!", 5, 40);
13: }
14:}
Astuce
part 01 Page 59 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 60
2
Pour tester le chier classe obtenu, crez un chier HTML avec ltiquette <APPLET> comme
dans le chapitre prcdent :
<HTML>
<HEAD>
<TITLE>Another Applet</TITLE>
</HEAD>
<BODY>
<P>My second Java applet says:
<BR><APPLET CODE="HelloAgainApplet.class" WIDTH=200 HEIGHT=50>
</APPLET>
</BODY>
</HTML>
Dans cet exemple, le chier classe Java et le chier HTML se trouvent dans le mme rpertoire.
Sauvegardez le chier dans HelloAgainApplet.html. Lancez ensuite le navigateur compatible
Java ou Appletviewer de Java. La Figure 2.7 afche le rsultat de lexcution (la chane "Hello
Again!" est rouge).
Rsum
Une partie des informations de ce chapitre peut sembler trop thorique aux dbutants en pro-
grammation oriente objet. Il ny a pas sen inquiter : ils comprendront mieux en avanant
dans le livre et en crant des classes et des applications.
Une des difcults essentielles de la programmation oriente objet rside dans le nom des
concepts. La POO possde un jargon trs tendu. Voici un rsum des termes et des concepts
abords dans ce chapitre :
Classe : modle dobjet contenant des variables et des mthodes. Celles-ci dnissent le com-
portement et les attributs. Les classes peuvent hriter de variables et de mthodes issues dautres
classes.
Mthode de classe : mthode dnie dans une classe, oprant sur la classe elle-mme et pouvant
tre appele par lintermdiaire de la classe ou lune de ses instances.
Figure 2.7
Lapplet HelloAgain.
part 01 Page 60 lundi 1 dcembre 1997 10:05
61
L E P R O G R A M M E U R
Variable de classe : variable "appartenant" la classe et toutes les instances prises dans leur
ensemble, dont la valeur est stocke dans la classe.
Instance : la mme chose quun objet ; tout objet est une instance dune classe.
Mthode dinstance : mthode dnie dans une classe, qui opre sur une instance de cette
classe. Les mthodes dinstance sont habituellement appeles simplement mthodes.
Variable dinstance : variable appartenant une instance individuelle, dont la valeur est stocke
dans linstance.
Interface : une collection de spcications abstraites de comportements, qui peuvent tre impl-
mentes par les classes individuelles.
Objet : instance concrte dune classe. Tous les objets qui sont des instances dune mme classe
accdent aux mmes mthodes, mais leurs variables dinstance ont en gnral des valeurs dif-
frentes.
Package : collection de classes et dinterfaces. Dans le cas des classes incluses dans dautres
packages que java.lang, le nom du package complet doit tre spci pour les rfrencer, ou
le package doit tre import.
Sous-classe : une classe situe plus bas, dans la hirarchie de lhritage, que sa classe parente
appele super-classe. La cration dune classe est souvent appele sous-classement.
Super-classe : une classe situe au-dessus de ses sous-classes dans la hirarchie de lhritage.
Questions rponses
Q Les mthodes sont des fonctions dnies dans les classes. Si elles ressemblent des
fonctions et se comportent comme elles, pourquoi les appelle-t-on mthodes ?
R Certains langages de programmation orients objet les nomment fonctions (C++ les appelle
fonctions membres). Dautres langages orients objet font la diffrence entre les fonctions
internes une classe ou un objet et les fonctions externes. Dans ce cas, avoir des termes
diffrents est important pour comprendre le fonctionnement de chacune. Java a choisi le
terme de mthode car la diffrence entre fonctions internes et externes nest signicative que
pour dautres langages, et parce que le terme mthode est maintenant couramment utilis
dans la technologie oriente objet.
Q Je comprends ce que reprsentent les variables et mthodes dinstance mais pas la
notion de mthodes et de variables de classe.
R Tout ce qui est fait dans des programmes Java se ralise avec des objets. Malgr tout, il
est utile de stocker certains comportements et attributs dans la classe et non dans lobjet.
Par exemple, pour crer une nouvelle instance dans une classe, il faut une mthode dnie
et disponible dans la classe elle-mme, faute de quoi on ne peut pas crer cette instance.
part 01 Page 61 lundi 1 dcembre 1997 10:05
Programmation oriente objet et Java
Java 1.1 62
2
Les variables de classe, elles, sont souvent utilises lorsque la valeur dun attribut doit tre
partage par toutes les instances de la classe.
En gnral, vous utilisez des variables et des mthodes dinstance. Vous trouverez des
informations dtailles sur les variables et les mthodes de classe dans les chapitre suivants
de cette premire partie.
part 01 Page 62 lundi 1 dcembre 1997 10:05
L E P R O G R A M M E U R
3
3
Les bases de Java
part 01 Page 63 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 64
3
Vous avez vu jusquici les aspects les plus gnraux de la programmation Java, ce quest lex-
cutable dun programme Java, et comment crer des classes simples. Le Chapitre 3 traite plus
en dtail du langage de programmation Java.
Dans ce chapitre, vous ne dnirez ni classes ni objets, et vous naurez pas vous soucier de la
faon dont ces lments communiquent au sein dun programme Java. Vous vous contenterez
dexaminer les instructions Java lmentaires. Elles sont utilises pour raliser les tches de
base dans une dnition de mthode telle que main().
Ce chapitre aborde les thmes suivants :
G Les instructions et expressions de Java
G Les types de donnes et de variables
G Les commentaires
G Les constantes
G Les oprateurs arithmtiques
G Les comparaisons
G Les oprateurs logiques
Java ressemble C++ et, par extension, au langage C. Une grande partie de sa syntaxe est
connue des programmeurs expriments en langage C ou C++. Les notes techniques (comme
celle-ci) les intresseront plus particulirement, puisquelles les informent des diffrences que
C et C++ ou les autres langages traditionnels prsentent avec Java.
Instructions et expressions
Une instruction scrit trs simplement avec Java. Elle reprsente une opration, comme le
montrent les exemples suivants :
int i = 1;
import java.awt.Font;
System.out.println("This motorcycle is a"
+ color + " " + make);
m.engineState = true;
Les instructions retournent parfois des valeurs. Cest le cas pour laddition de deux nombres ou
pour un test dgalit entre deux valeurs. Ces instructions, appeles expressions, sont tudies
plus loin dans ce chapitre.
Les espaces placs dans les instructions Java sont ignors, comme dans le langage C. Une ins-
truction peut gurer sur une seule ligne ou sur plusieurs, ce qui est sans incidence sur la faon
dont elle est lue par le compilateur Java. Ce qui importe, cest que toutes les instructions Java
se terminent par un point-virgule. Labsence de celui-ci provoque une erreur la compilation.
Info
part 01 Page 64 lundi 1 dcembre 1997 10:05
65
L E P R O G R A M M E U R
Java possde galement des instructions composes, ou blocs, utilises comme une instruction
simple. Elles commencent et nissent par des accolades ({}). Le Chapitre 5 apporte des prci-
sions sur la notion de blocs.
Types de donnes et de variables
Les variables sont des emplacements de mmoire dans lesquels on peut stocker des valeurs.
Toute variable a un nom, un type et une valeur. Avant dutiliser une variable, il faut la dclarer.
On peut ensuite lui attribuer une valeur (comme vous allez le voir plus loin, on peut lui attribuer
une valeur en mme temps quon la dclare).
Java possde trois sortes de variables : les variables dinstance, les variables de classe et les
variables locales.
Les variables dinstance dterminent les attributs ou ltat dun objet donn. Les variables de
classe ont le mme type de fonction, mais leurs valeurs sappliquent tous les objets de la classe
(et la classe elle-mme) et non un seul objet.
Les variables locales sont dclares et utilises dans les dnitions de mthodes. Elles servent
de compteur dindex dans une boucle, de variable temporaire ou encore, elles contiennent des
valeurs utiles la dnition de la mthode. Elles sont aussi utilises dans les blocs, tudis au
Chapitre 5. La dnition de variable et sa valeur cessent dexister aprs lexcution de la
mthode (ou du bloc). Elles sont utiles pour stocker les informations destines une seule
mthode. On utilise des variables locales pour stocker des donnes utilises par une seule
mthode (ou un seul bloc), et les variables dinstance pour les donnes utilises par plusieurs
mthodes dans un objet.
Les variables locales et les variables dinstance sont dclares de faon similaire, mais laccs
et lattribution de valeurs aux variables dinstance ou de classe diffrent de ceux des variables
locales. Ce chapitre traite plus particulirement de lutilisation des variables dans les dnitions
de mthodes, cest--dire des variables locales. Le chapitre suivant montre comment sy pren-
dre avec les variables de classe et les variables dinstance.
Contrairement dautres langages, Java ne possde pas de variable globale. Les variables
dinstance et de classe les remplacent. Elles servent communiquer des informations "globa-
les" dans et entre les diffrents objets. Comme Java est un langage orient objet, il faut penser
en termes dobjets et de dialogues entre objets, et non en termes de programmes.
Info
part 01 Page 65 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 66
3
Dclaration des variables
Une variable doit tre dclare avant dtre utilise dans un programme. Sa dclaration se com-
pose dun type et dun nom de variable :
int myAge;
String myName;
boolean isTired;
Les dnitions de variables se placent nimporte o dans la dnition de la mthode (l o il
peut y avoir une instruction Java habituelle), mais elles sont souvent dclares en tte :
public static void main (String args[]) {
int count;
String title;
boolean isAsleep;
...
}
Toutes les variables du mme type peuvent tre dclares ensemble :
int x, y, z;
String firstName, LastName;
Linitialisation dune variable est possible dans la dclaration :
int myAge, mySize, numShoes = 28;
String myName = "Laura";
boolean isTired = true;
int a = 4, b = 5, c = 6;
Si une ligne contient plusieurs variables mais une valeur dinitialisation unique (voir premire
ligne de lexemple), seule la dernire variable est initialise. Pour initialiser plusieurs variables
sur une seule ligne, il suft de les sparer avec une virgule, comme dans la dernire ligne de
lexemple ci-avant.
Avant dutiliser une variable locale, il faut lui attribuer une valeur (la compilation du pro-
gramme Java choue si une variable locale est vide). Pour cette raison, il est prfrable dinitia-
liser les variables locales dans leurs dclarations. Cette contrainte nexiste pas pour les variables
dinstance ou de classe, qui ont une valeur par dfaut en fonction de leur type :
null pour les instances de classe,
0 pour les variables numriques,
\0 pour les caractres, et
false pour les boolens.
part 01 Page 66 lundi 1 dcembre 1997 10:05
67
L E P R O G R A M M E U R
Noms de variables
Les noms de variables du langage Java commencent par une lettre, le signe de soulignement (_)
ou le signe dollar ($). Ils ne peuvent pas commencer par un chiffre. Les caractres suivants sont
des chiffres ou des lettres. Les symboles comme %, *, @ ou / doivent tre vits car ils sont sou-
vent rservs aux oprateurs de Java.
Java utilise galement le jeu de caractres Unicode. Unicode regroupe tous les caractres ASCII
standard et plusieurs milliers dautres caractres. La plupart des alphabets internationaux sont
ainsi reprsents. Les noms de variables peuvent alors contenir des caractres accentus ou tout
autre glyphe, condition que le code du caractre Unicode soit suprieur 00C0.
La codication Unicode est regroupe en deux volumes contenant des milliers de caractres. Si
Unicode nest pas rellement ncessaire, il est prfrable de se limiter aux chiffres et aux lettres
pour nommer les variables.
Enn, Java diffrencie les majuscules et les minuscules. Aussi, la variable X est-elle diffrente
de la variable x. Un autre exemple : rose nest ni une Rose ni une ROSE.
Par convention, un nom de variable Java doit tre reprsentatif de cette variable. Il se compose
souvent de plusieurs mots combins. Le premier est crit en minuscules et les mots suivants
commencent par une majuscule :
button theButton;
long reallyBigNumber;
boolean currentWeatherStateOfPlanetXShortVersion;
Types de variables
Une dclaration de variable se compose dun nom mais aussi dun type, qui dtermine les
valeurs possibles de cette variable. Un type de variable :
G un des huit types de donnes primaires,
G un nom de classe,
G un tableau.
La dclaration et lutilisation des variables tableaux sont traites au Chapitre 5. Le prsent cha-
pitre se limite aux types de donnes primaires et au type de classe.
Types de donnes primaires
Les huit types de donnes primaires regroupent les types entiers usuels, les nombres virgule
ottante, les caractres et les valeurs boolennes. Il sont appels primaires car ils sont construits
dans le systme et ne sont pas des objets, ce qui rend leur utilisation plus efcace. Ils sont ind-
pendants de la machine, et par suite, leur taille et leurs caractristiques ne varient pas selon les
programmes.
Info
part 01 Page 67 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 68
3
Il existe quatre types dentiers dans Java, correspondant chacun un intervalle de valeurs (voir
Tableau 3.1). Ils sont tous signs, et acceptent donc les nombres ngatifs ou positifs. Le choix
du type dpend des valeurs maximales et minimales que peut prendre la variable. Si une valeur
stocke devient trop grande pour le type de la variable, elle est tronque, sans autre indication.
Les nombres virgule ottante sont utiliss pour les nombres comportant une partie dcimale.
Dans Java, ils respectent les rgles IEEE 754 (un standard international pour larithmtique et
la dnition des nombres virgule ottante). Java contient deux types de nombres virgule
ottante : float (32 bits, simple prcision) et double (64 bits, double prcision).
Le type char dnit les caractres. Comme Java utilise la codication Unicode, le type char est
non sign, avec une prcision de 16 bits.
Enn, le type boolean accepte deux valeurs : true ou false. Pour Java, contrairement aux lan-
gages analogues C, boolean nest pas un nombre. Il ne peut donc tre trait comme tel. Tous
les tests dune variable boolenne doivent rechercher les valeurs true ou false.
Notez que tous les types de donnes primaires sont indiqus en minuscules. Ce point est impor-
tant, car il existe aussi des classes de mmes noms, mais commenant par une majuscule, et dont
le comportement est diffrent. Par exemple, le type primaire boolean est diffrent de la classe
Boolean. Vous en apprendrez davantage sur ces classes particulires et sur leur utilisation au
Chapitre 4.
Types de classes
Les variables de Java peuvent aussi tre dclares pour recevoir un objet dune classe
particulire :
String LastName;
Font basicFont;
OvalShape myOval;
Ces variables reoivent uniquement les objets dune classe donne ou de lune de ses sous-clas-
ses. Cette seconde variante est utile lorsquune variable doit pouvoir contenir des instances de
diverses classes ayant une mme super-classe. Par exemple, dans le cas dun ensemble de clas-
ses de fruits (Pomme, Poire, Fraise, etc.), toutes hritires de la classe gnrale Fruit, si vous
dclarez une variable de type Fruit, cette variable peut contenir des instances de nimporte
Tableau 3.1 Les types dentiers
Type Taille Intervalle de valeurs
byte 8 bits -128 127
short 16 bits -32 768 32 767
int 32 bits -2 147 483 648 2 147 483 647
long 64 bits -9 223 372 036 854 775 808 9 223 372 036 854 775 807
part 01 Page 68 lundi 1 dcembre 1997 10:05
69
L E P R O G R A M M E U R
laquelle des sous-classes de Fruit. Si lon dclare une variable de type Object, cette variable
peut contenir nimporte quel objet.
Java ne possdant pas dinstruction typedef (comme en C ou C++), la dclaration dun nou-
veau type passe par celle dune nouvelle classe. Il est ensuite possible de dclarer une variable
du type de cette classe.
Attribution de valeurs aux variables
Lorsquune variable a t dclare, on peut lui attribuer une valeur au moyen de loprateur
daffectation (=), de la faon suivante :
size = 14;
tooMuchCaffeine = true;
Commentaires
Java possde trois sortes de commentaires, deux pour les commentaires ordinaires du code
source, et une troisime pour le systme particulier de documentation javadoc.
Les symboles /* et */ entourent des commentaires multilignes. Le texte compris entre ces deux
bornes est ignor :
/* I dont know how I wrote this next part; I was working
really late one night and it just sort of appeared. I
suspect the code elves did it for me. It might be wise
not to try and change it.
*/
Les commentaires ne simbriquent pas ; autrement dit, vous ne pouvez pas placer un commen-
taire lintrieur dun commentaire.
Le double slash (//) prcde les commentaires dans une ligne. Tout le texte situ entre le double
slash et la n de ligne est ignor :
int vices =7; // Ceci est un commentaire
Enn, les commentaires spciaux destins au systme javadoc commencent avec /** et se
terminent par */. Javadoc gnre de la documentation API partir du code. Ce livre ne traite
pas javadoc. Pour obtenir des informations sur cet outil, consultez la documentation fournie
avec le JDK ou la page daccueil Java de Sun (http://java.sun.com).
Info
part 01 Page 69 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 70
3
Constantes
Les constantes stockent des valeurs simples utiles aux programmes, suivant le principe : ce que
vous tapez, cest aussi ce que vous obtenez.
Constante est un terme de programmation. La frappe de 4 dans un programme Java entrane la
mmorisation de la valeur 4 dans un entier. Si vous tapez a vous obtenez un caractre ayant
la valeur a.
Il existe plusieurs types de constantes dans Java : nombres, caractres, chanes et valeurs boo-
lennes.
Constantes nombre
Les entiers sont reprsents par plusieurs types de constantes. Par exemple, le nombre 4 est une
constante entire dcimale de type int (mme si cette valeur peut tre attribue une variable
de type byte ou short, vu sa taille). Une constante entire dcimale trop grande pour un type
int est automatiquement de type long. Ajouter L ou l un nombre force ce type long (4L est un
entier long de valeur 4). Les entiers ngatifs sont prcds dun signe moins (-) : par exemple,
-45.
Les entiers sexpriment en octal ou en hexadcimal. Si un entier commence par 0, le nombre est
en octal : 0777 ou 0004, par exemple. Si lentier commence par 0x (ou 0X), cest un nombre hexa-
dcimal (0xFF, 0XAF45). Les nombres hexadcimaux sont constitus de chiffres (0 9) et de
lettres majuscules ou minuscules (a [ou A] f [ou F]).
Les constantes virgule ottante sont gnralement constitues de deux parties : la part entire
et la part dcimale (par exemple 5.677777). Elles deviennent alors des nombres virgule ot-
tante de type double sans tenir compte de la prcision. Ajouter la lettre f (ou F) un nombre
force le type float : 2.56F.
Pour avoir des exposants avec les constantes virgule ottante, il faut ajouter les lettres e ou E
suivies de lexposant (qui peut tre ngatif) la n du nombre : 10e45 ou .36E-2.
Constantes boolennes
Les constantes boolennes sont reprsentes par deux mots cls : true ou false. Vous pouvez
utiliser ces mots cls partout o vous voulez effectuer un test, ou bien encore, comme les deux
seules valeurs possibles pour les variables boolennes.
Constantes caractre
Les constantes caractre se composent dune lettre entoure de guillemets simples : a, #,
3, etc. Ces caractres sont stocks sous forme de codes Unicode 16 bits. Le Tableau 3.2
part 01 Page 70 lundi 1 dcembre 1997 10:05
71
L E P R O G R A M M E U R
prsente les codes spciaux. Ce sont des caractres non imprimables ou Unicode. Dans les
squences, la lettre d reprsente un chiffre (0 9) ou une lettre (a f ou A F).
Les programmeurs en C et C++ auront certainement remarqu labsence des caractres de
contrle \a (alarme) et \v (tabulation verticale).
Constantes chane
Une chane est une combinaison de caractres. En langage Java, les chanes sont des objets de
la classe String, et non de simples tableaux de caractres, comme dans C ou C++. De plus, elles
empruntent certaines de leurs caractristiques aux tableaux (la possibilit de tester leur lon-
gueur, dajouter ou deffacer certains caractres). Comme ce sont des objets part entire pour
Java, elles possdent des mthodes permettant de les combiner, de les tester ou de les modier
trs facilement.
Les chanes sont reprsentes par une srie de caractres entoure de guillemets doubles :
"Hi, Im a string literal. "
"" //une chaine vide
Les chanes peuvent contenir des caractres de contrle (retour la ligne, tabulation ou carac-
tres Unicode) :
"A string with a \t tab in it"
"Nested strings are \"strings inside of\" other strings"
"This string brought to you by Java\u2122"
Dans le dernier exemple, la squence Unicode \u2122 produit le symbole .
Tableau 3.2 Codes des caractres spciaux
Squence Signication
\n Retour la ligne
\t Tabulation
\b Retour arrire
\r Retour chariot
\f Saut de page
\\\ Slash invers
\ Guillemet simple
\" Guillemet double
\ddd Octal
\xdd Hexadcimal
\udddd Caractre Unicode
Info
part 01 Page 71 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 72
3
Pouvoir reprsenter un caractre par son code Unicode ne signie pas quil peut tre afch.
Lordinateur ou le systme dexploitation utilis ne supporte peut-tre pas Unicode, ou votre
police de caractres peut ne pas contenir son image. La reconnaissance des squences
Unicode par Java offre un moyen de coder des caractres spciaux pour des systmes compa-
tibles Unicode. Java 1.02 tait plus limit cet gard que Java 1.1 ; en Java 1.1, vous pouvez
afcher nimporte quel caractre Unicode, ds lors quil existe une image pour ce caractre.
Pour plus dinformations sur Unicode, consultez la page daccueil Unicode http://unicode.org.
Lutilisation dune constante chane dans un programme Java entrane la cration automatique
dun objet de la classe String avec la valeur fournie. Cest la particularit des chanes. Les
autres constantes ne se comportent pas ainsi : les types primaires ne sont pas de vritables
objets, et la cration dun nouvel objet, autre quun objet String, ncessite la cration explicite
dune nouvelle instance de classe.
Oprateurs et expressions
Dans Java, une expression est la plus simple forme dune instruction accomplissant quelque
chose. Toutes les expressions, lorsquelles sont values, retournent une valeur (les autres ins-
tructions ne le font pas ncessairement).
Les oprations arithmtiques et les tests dgalit sont des expressions. Une expression retourne
une valeur, qui est attribue une variable ou teste dans dautres instructions.
La plupart des expressions Java utilisent des oprateurs. Les oprateurs sont des symboles
spciaux, pour des oprations arithmtiques, diffrentes formes daffectation, des oprations
dincrmentation ou de dcrmentation, ainsi que pour des oprations logiques.
Les expressions sont des instructions qui retournent une valeur.
Les oprateurs sont des symboles spciaux couramment utiliss dans les expressions.
Oprateurs arithmtiques
Java possde cinq oprateurs arithmtiques de base (voir Tableau 3.3).
Tableau 3.3 Oprateurs arithmtiques
Oprateur Signication Exemple
+ Addition 3 + 4
- Soustraction 5 - 7
* Multiplication 5 * 5
/ Division 14 / 7
% Modulo 20 % 7
Info
Lexique
part 01 Page 72 lundi 1 dcembre 1997 10:05
73
L E P R O G R A M M E U R
Tous ces oprateurs utilisent deux oprandes et sont placs entre ces derniers. Loprateur de
soustraction (-) peut aussi servir inverser le signe dun oprande.
Le rsultat de la division de deux entiers est un entier : comme les entiers nont pas de partie
dcimale, le reste de la division est ignor. Par exemple, ce rsultat de lexpression 31 / 9 est 3.
Loprateur modulo (%) donne le reste de la division de deux oprandes. Par exemple, 31 % 9
gale 4 (3 fois 9 gale 27, plus 4 pour obtenir 31).
Pour les entiers, le rsultat dune opration est de type int ou long, indpendamment du type
des oprandes (les types short ou byte sont automatiquement convertis en int). Les grands
rsultats sont de type long et les autres de type int. Les oprations arithmtiques sur un entier
et un nombre virgule ottante ont pour rsultat un nombre virgule ottante. Les spcica-
tions du langage Java dcrivent les mcanismes de manipulation et de conversion des donnes
numriques dun type vers un autre. Le Listing 3.1 donne un exemple darithmtique simple en
Java.
Listing 3.1 Exemple doprations arithmtiques simples
1: class ArithmeticTest {
2: public static void main (String[] args) {
3: short x = 6;
4: int y = 4;
5: float a = 12.5f;
6: float b = 7f;
7:
8: System.out.println("x is " + x + ", y is " + y);
9: System.out.println("x + y = " + (x + y));
10: System.out.println("x - y = " + (x - y));
11: System.out.println("x / y = " + (x / y));
12: System.out.println("x % y = " + (x % y));
13:
14: System.out.println("a is " + a + ", b is " + b);
15: System.out.println("a / b = " + (a / b));
16: }
17:
18: }
Rsultat :
x is 6, y is 4
x + y = 10
x - y = 2
x / y = 1
x % y = 2
a is 12.5, b is 7
a / b = 1.78571
part 01 Page 73 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 74
3
Dans lexemple (remarquez la mthode main()), les lignes 3 6 dnissent quatre variables.
Les deux premires, x et y, sont des entiers (type int). Les suivantes, a et b, sont des nombres
virgule ottante (type float). Un rappel : le type par dfaut des constantes virgule ottante
(comme 12.5) est double. Pour obtenir des nombres de type float, il faut les faire suivre de la
lettre f (lignes 5 et 6).
La suite du programme effectue des oprations mathmatiques simples avec des entiers et des
nombres virgule ottante. Il afche ensuite les rsultats.
Notez aussi la prsence de la mthode System.out.println(), utilise dans les chapitres prc-
dents sans explication. Cette mthode envoie simplement un message vers la sortie standard de
votre systme (lcran), une fentre particulire ou un chier log. La destination est fonction du
systme et de lenvironnement de dveloppement utiliss. La mthode reoit un seul argument
(une chane), le signe + permettant la concatnation de valeurs dans une chane.
A propos doprations mathmatiques, signalons deux particularits de Java. La premire est
la classe Math, qui fournit de nombreuses oprations mathmatiques courantes comme la racine
carre, la valeur absolue, le cosinus, etc., que vous verrez de plus prs au chapitre suivant,
"Travailler avec les objets". La seconde particularit est propre Java 1.1 : les classes BigDe-
cimal et BigInteger. Ces classes fournissent des mcanismes pour stocker et traiter des nom-
bres extrmement grands, appels "bignums", qui peuvent ltre trop pour les types primaires
Java standard. Si ce sujet vous intresse, consultez la documentation API du package
java.math.
Affectations
Laffectation des variables est une forme dexpression qui retourne une valeur. Aussi est-il pos-
sible de chaner des variables :
x = y = z = 0;
Dans cet exemple, les trois variables prennent la valeur 0.
La partie droite de lexpression daffectation est toujours value avant lopration daffecta-
tion. Une expression comme x = x + 2 est donc traite ainsi : 2 est ajout la valeur de x, puis le
rsultat est affect x. Ce type dopration est tellement courant que Java en possde une ver-
sion abrge emprunte C et C++. Le Tableau 3.4 liste ces oprateurs daffectation combine.
Tableau 3.4 Oprateurs daffectation
Expression Signication
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
Info
part 01 Page 74 lundi 1 dcembre 1997 10:05
75
L E P R O G R A M M E U R
Les oprations daffectation abrge et les combinaisons quelles sont censes remplacer ne
sont pas strictement quivalentes, notamment quand x et y sont elles-mmes des expressions
complexes et dans la mesure o le code exploite certains effets de bord de ces expressions com-
plexes. Dans la plupart des cas, cependant, les deux formes sont quivalentes, dun point de vue
fonctionnel. Pour obtenir des informations complmentaires sur lvaluation des expressions
complexes, consultez les spcications du langage Java.
Incrmentation et dcrmentation
Comme en C ou C++, les oprateurs ++ et permettent dincrmenter ou de dcrmenter de 1
la valeur dune variable. Par exemple, x++ ajoute 1 la valeur de x comme le ferait lexpression
x = x + 1. De la mme faon, x-- diminue de 1 la valeur de x. (Contrairement C et C++, Java
permet x dtre du type virgule ottante).
Ces deux oprateurs se placent devant ou derrire la valeur incrmenter ou dcrmenter.
Dans le cas dune expression simple, leur position importe peu. A linverse, pour des affecta-
tions complexes avec attribution du rsultat de lexpression qui incrmente ou dcrmente, ce
choix fait toute la diffrence.
Soit les deux expressions suivantes :
y = x++;
y = ++x;
Elles donnent des rsultats diffrents. Quand les oprateurs sont placs aprs la valeur (x++ ou
x--), y prend la valeur de x avant incrmentation. Avec la notation en prfixe, la valeur de x est
attribue y aprs incrmentation. Le Listing 3.2 illustre le fonctionnement de ces oprateurs.
Listing 3.2 Test des oprateurs dincrment en mode postxe ou prxe
1: class PrePostFixTest {
2:
3: public static void main (String args[]) {
4: int x = 0;
5: int y = 0;
6:
7: System.out.println("x and y are " + x + " and " + y);
8: x++;
9: System.out.println("x++ results in " + x);
10: ++x;
11: System.out.println("++x results in " + x);
12: System.out.println("Resetting x back to 0.");
13: x = 0;
14: System.out.println("-------------");
15: y = x++;
16: System.out.println("y = x++ (postfix) results in:");
17: System.out.println("x is " + x);
18: System.out.println("y is " + y);
Info
part 01 Page 75 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 76
3
19: System.out.println("-------------");
20:
21: y = ++x;
22: System.out.println("y = ++x (prefix) results in:");
23: System.out.println("x is " + x);
24: System.out.println("y is " + y);
25: System.out.println("-------------");
26:
27: }
28:
29: }
Rsultat :
x and y are 0 and 0
x++ results in 1
++x results in 2
Resetting x back to 0.
------
y = x++ (postfix) results in:
x is 1
y is 0
------
y = ++x (prefix) results in:
x is 2
y is 2
------
Dans la premire partie de lexemple, la valeur de x est simplement augmente avec les nota-
tions en postxe et en prxe des oprateurs dincrment. Dans les deux cas, la valeur de x aug-
mente de 1. Dans une forme simple comme celle-ci, les deux notations donnent le mme
rsultat.
Dans la deuxime partie de lexemple, lexpression y = x++ utilise la notation en postxe de
loprateur dincrment. La valeur de x est alors incrmente aprs son affectation y. y prend
donc la valeur initiale de x (0), qui est ensuite augmente de 1.
Dans la troisime partie, lexpression y = ++x utilise la notation en prxe. La valeur de x est
alors incrmente avant dtre attribue y. La valeur 1 de x passe donc 2, puis elle est attri-
bue y. x et y nissent avec la mme valeur : 2.
Dun point de vue technique, cette description est incorrecte. En ralit, Java value toujours
entirement toutes les expressions droite dune affectation avant dattribuer cette valeur une
variable. Affecter x y avant dincrmenter x ne reprsente donc pas la ralit. En fait, Java
mmorise la valeur de x, value x (incrment) puis attribue lancienne valeur de x y. Pour la
majorit des cas simples, cette distinction a peu dimportance, mais pour les expressions plus
complexes, elle affecte le comportement de lexpression complte. Pour obtenir des informa-
tions complmentaires sur lvaluation des expressions dans Java, consultez les spcications
du langage Java.
Info
part 01 Page 76 lundi 1 dcembre 1997 10:05
77
L E P R O G R A M M E U R
Comparaisons
Java possde plusieurs expressions permettant deffectuer des comparaisons (voir Tableau 3.5).
Chacune delles retourne une valeur boolenne (true ou false).
Oprations logiques
Les expressions dont le rsultat est une valeur boolenne (par exemple, les oprations de com-
paraison) peuvent tre combines laide doprateurs logiques, ET, OU, XOU (ou exclusif) et
NON.
Le ET logique est reprsent par les oprateurs & ou &&. Lexpression est vraie si les deux op-
randes sont galement vrais. Si lun des deux est faux, alors la combinaison est fausse. La dif-
frence entre les deux oprateurs rside dans lvaluation de lexpression. Avec &, les deux cts
de lexpression sont valus indpendamment des rsultats obtenus. Avec le &&, si la partie gau-
che de lexpression est fausse, la combinaison est value fausse et la partie droite ignore.
Le OU est symbolis par | ou ||. Les expressions OU sont vraies si lun des deux oprandes est
vrai. Sils sont tous les deux faux, lexpression est value fausse. Comme pour & et &&, lop-
rateur | value les deux cts de lexpression indpendamment des rsultats. Avec ||, si la par-
tie gauche de lexpression est vraie, lexpression complte est value vraie et la partie droite
ignore.
Le OU EXCLUSIF ^ sajoute ces deux oprations logiques. Il retourne la valeur true (vrai)
si les deux oprandes sont diffrents (lun vrai et lautre faux ou vice versa). Dans le cas con-
traire, il retourne la valeur false (faux).
En gnral, les oprateurs utiliss pour de vraies combinaisons logiques sont && et ||. Les op-
rateurs &, | et ^ sont plutt utiliss pour des oprations logiques au niveau bit.
Le NON logique est reprsent par loprateur !. Il ne concerne quun argument de lexpression.
La valeur dune expression NON est la ngation de lexpression. Si x est vrai, !x est faux.
Tableau 3.5 Oprateurs de comparaison
Oprateur Signication Exemple
== Egal x == 3
!= Diffrent x != 3
< Infrieur x < 3
> Suprieur x > 3
<= Infrieur ou gal x <= 3
>= Suprieur ou gal x >= 3
part 01 Page 77 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 78
3
Oprateurs sur les bits
Pour terminer, voici un court rsum des oprateurs Java au niveau des bits. Ils sont pour la plu-
part issus des langages C et C++. Ils permettent de raliser des oprations directement sur les
bits des nombres entiers. Ce livre ne traite pas ces oprations. Cest un sujet pointu trs bien
expliqu dans les manuels de C ou C++. Le Tableau 3.6 prsente ces oprateurs.
Hirarchie des oprateurs
La hirarchie des oprateurs indique lordre dvaluation des expressions. Dans certains cas,
elle dtermine la valeur de lexpression complte. Soit lexpression suivante :
y = 6 + 4 / 2
La valeur de y est 5 ou 8, selon la partie de lexpression qui est value en premier (6 + 4 ou
4 / 2). La hirarchie des oprateurs impose un ordre de traitement des oprations. Le rsultat
dune expression est ainsi prvisible. En gnral, lincrmentation et la dcrmentation sont
traites avant les oprations arithmtiques, les oprations arithmtiques sont values avant les
comparaisons, et les comparaisons avant les expressions logiques. Les affectations sont traites
en dernier.
Le Tableau 3.7 indique la hirarchie propre aux diffrents oprateurs de Java. Les oprateurs de
la premire ligne du tableau sont valus en premier, ceux de la deuxime en second, etc. Les
oprateurs prsents dans une mme ligne ont une " priorit " gale et sont valus de gauche
droite (position dans lexpression). Ce tableau montre que la division est traite avant laddition :
le rsultat de y = 6 + 4 / 2 est donc 8.
Tableau 3.6 Oprateurs sur les bits
Oprateur Signication
& ET bit bit
| OU bit bit
^ OU exclusif bit bit
<< Dcalage gauche bit bit
>> Dcalage droite bit bit
>>> Dcalage droite bit bit avec remplissage par des 0
~ Ngation bit bit
<<= Dcalage gauche et affectation (x = x << y)
>>= Dcalage droite et affectation (x = x >> y)
>>>= Dcalage droite, remplissage par des 0 et affectation (x = x >>> y)
x &= y ET affectation (x = x & y)
x |= y OU affectation (x + x | y)
x ^= y NON affectation (x = x ^ y)
part 01 Page 78 lundi 1 dcembre 1997 10:05
79
L E P R O G R A M M E U R
Pour changer lordre de traitement, il suft de mettre entre parenthses les expressions valuer
en premier. De plus, les parenthses simbriquent, celles qui se trouvent le plus lintrieur
tant traites en premier. Lexpression suivante a pour rsultat 5, car lexpression 6 + 4 est va-
lue dabord :
y = (6 + 4) / 2
Les parenthses sont souvent utiles pour clarier lordre de traitement dans une expression. En
fait, elles facilitent la lecture et la comprhension du code. Lajout de parenthses nayant aucun
effet nocif, il ny a pas se restreindre, surtout si cet ajout facilite la comprhension de lva-
luation des expressions.
Tableau 3.7 Ordre de traitement des oprateurs
Oprateur Commentaire
. [] () Les parenthses () groupent les expressions. Le point (.) permet daccder
aux mthodes et variables dans les classes et les objets (voir le chapitre
suivant). [] est utilis pour les tableaux (cet oprateur sera tudi dans un
autre chapitre de la premire partie de louvrage).
++ -- ! ~ instanceof instanceof retourne vrai (true) si lobjet appartient la classe dsigne,
et faux (false) sil appartient lune de ses super-classes (voir chapitre
suivant).
new (type) expression Loprateur new cre de nouvelles instances de classes. Dans ce cas, les ()
attribuent un autre type une valeur (voir le chapitre suivant).
* / % Multiplication, division, modulo.
+ - Addition, soustraction.
<< >> >>> Dcalages gauche et droite bit bit.
< > >= <= Comparaison.
== != Egalits.
& ET.
^ OU exclusif.
| OU.
&& ET logique.
|| OU logique.
? : Raccourcis pour if...then...else (voir Chapitre 5).
= += -= *= /= %= ^= Affectations diverses.
&= |= <<= >>= >>>= Affectations diverses (suite).
part 01 Page 79 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 80
3
Arithmtique sur les chanes
Une particularit de Java est lutilisation de loprateur daddition (+) pour crer et concatner
des chanes. Dans la plupart des exemples prcdents apparaissaient des lignes comme celle-ci :
System.out.println(name + " is a " + color " beetle");
Cette ligne afche une chane de caractres dans laquelle la valeur des variables (ici name et
color) est insre aux endroits indiqus dans linstruction.
Loprateur + employ avec des chanes ou dautres objets construit une chane unique. Cest
le rsultat de la concatnation de tous les oprandes. Si lun des oprandes nest pas une chane,
il est automatiquement converti en chane. Ceci facilite la cration des lignes en sortie de ce
type.
Un objet ou un type peut tre converti en chane grce la mthode toString(). Tout objet pos-
sde une reprsentation chane par dfaut (le nom de la classe suivi daccolades), mais les clas-
ses rednissent gnralement toString() pour offrir une meilleure reprsentation en sortie.
La concatnation des chanes facilite la construction de lignes comme dans lexemple prc-
dent. Pour crer une chane, il vous suft den runir les diffrents composants (descriptions et
variables) et denvoyer le rsultat vers la sortie standard, lcran, une applet, etc.
Loprateur +=, tudi prcdemment, est aussi utilis dans une chane. Linstruction :
myName += " Jr. ";
est quivalente :
myName = myName + " Jr. ";
exactement comme pour les nombres. Dans ce cas, la valeur de myName est modie (John Smith
devient John Smith Jr.).
Rsum
Un programme Java est constitu essentiellement de classes et dobjets, eux-mmes constitus
de mthodes et de variables. Les mthodes sont construites laide dinstructions et dexpres-
sions tudies dans ce chapitre. Ce sont les bases de la cration de classes et de mthodes. Leur
association permet dobtenir un programme Java complet.
Nous avons donc tudi : les variables, la faon de les dclarer et de leur attribuer une valeur,
les constantes pour crer facilement des nombres, les caractres et les chanes, les oprations
arithmtiques, les tests, etc. Cette syntaxe de base permet daborder le chapitre suivant, cest--
dire dapprendre travailler avec les objets et construire des programmes Java utiles et simples.
Info
part 01 Page 80 lundi 1 dcembre 1997 10:05
81
L E P R O G R A M M E U R
Pour terminer, le Tableau 3.8 prsente tous les oprateurs vus dans ce chapitre. Cest une
rfrence.
Tableau 3.8 Rsum des oprateurs
Oprateur Signication
+ Addition
- Soustraction
* Multiplication
/ Division
% Modulo
< Infrieur
> Suprieur
<= Infrieur ou gal
>= Suprieur ou gal
!= Diffrent de
&& ET logique
|| OU logique
! NON logique
& ET bit bit
| OU bit bit
^ OU exclusif bit bit
<< Dcalage gauche bit bit
>> Dcalage droite bit bit
>>> Dcalage droite bit bit avec remplissage par des 0
~ Ngation bit bit
= Affectation
++ Incrmentation
-- Dcrmentation
+= Addition et affectation
-= Soustraction et affectation
*= Multiplication et affectation
/= Division et affectation
%= Modulo et affectation
&= ET et affectation
|= OU et affectation
<<= Dcalage gauche et affectation
>>= Dcalage droite et affectation
>>>= Dcalage droite, remplissage par des 0 et affectation
part 01 Page 81 lundi 1 dcembre 1997 10:05
Les bases de Java
Java 1.1 82
3
Questions rponses
Q Ny a-t-il aucun moyen de dnir les constantes ?
R Java interdit la cration de constantes locales. Il permet uniquement la cration de variables
de classe et dobjets constants (voir chapitre suivant).
Q Que se passe-t-il si la valeur attribue une variable de type entier nappartient pas
lintervalle des valeurs autorises pour le type dclar ?
R La variable nest pas convertie dans le type adquat. Il se produit un dpassement de capa-
cit (overflow). Un nombre trop grand pour une variable donne est remplac par le plus
petit nombre ngatif du type ; on compte ensuite nouveau jusqu zro.
Comme cela donne des rsultats fantaisistes (et faux), assurez-vous davoir dclar le bon
type dentier. Si un nombre prsente un risque de dpassement de capacit, choisissez le
type suprieur.
Q Comment trouver le type dune variable donne ?
R Ce nest pas possible avec les types de base (int, float, boolean). Si vous avez besoin dun
type dtermin, il faut convertir la valeur en question dans le type dsir (voir chapitre
suivant).
Avec des types de classe, vous pouvez utiliser loprateur instanceof (voir chapitre suivant).
Q Pourquoi y a-t-il tant doprateurs raccourcis pour les oprations arithmtiques et les
affectations ? Cela complique la lecture du code.
R La syntaxe de Java est base sur la syntaxe de C++ et donc sur celle de C. Un des objectifs
du langage C est de raliser des choses volues avec le minimum de frappe. Cest pour cette
raison que les oprateurs raccourcis sont couramment utiliss.
Rien ne vous oblige les utiliser dans vos programmes. Si vous pensez gagner en lisibilit
du code, choisissez la forme longue.
Q Vous avez trait les oprations mathmatiques simples dans la section consacre aux
oprateurs. Puis-je supposer que Java a dautres moyens pour faire des oprations
mathmatiques plus complexes ?
R En effet, une classe spciale du package java.lang, appele java.lang.Math, comporte un
certain nombre de mthodes pour le calcul exponentiel, la trigonomtrie et dautres opra-
tions mathmatiques de base. En fait, comme on peut appeler ces mthodes en utilisant la
classe Math elle-mme, ce sont des exemples types de mthodes de classe. Vous en appren-
drez plus sur ce sujet au chapitre suivant.
part 01 Page 82 lundi 1 dcembre 1997 10:05
L E P R O G R A M M E U R
4
4
Travailler
avec les objets
part 01 Page 83 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 84
4
Tout dabord, une vidence : Java tant un langage orient objet, de nombreux objets seront trai-
ts dans ce chapitre. Il faut les crer, les mettre jour, les dplacer, modier leurs variables,
appeler leurs mthodes, les combiner entre eux et, bien sr, dvelopper des classes.
Ce chapitre couvre ltude de lobjet Java dans son milieu naturel, au travers des sujets suivants :
G Cration dinstances de classes
G Test et modication des variables dinstance et de classe dans une nouvelle instance
G Appel de mthodes dans un objet
G Conversion dobjets et dautres types de donnes dune classe vers une autre
G Complments divers sur le travail avec des objets
G Vue densemble des bibliothques de classes Java
Cration de nouveaux objets
Lcriture dun programme Java passe par la dnition de classes, qui sont des modles pour les
objets (voir Chapitre 2). Gnralement, lutilisation des classes se rsume la cration et la
manipulation des objets. Cette section explique comment crer un nouvel objet dans une classe
donne.
Lutilisation dune constante chane (une srie de caractres entre guillemets doubles) cre un
nouvel objet de la classe String avec la valeur de cette chane (voir chapitre prcdent).
Cette caractristique de la classe String est exceptionnelle : une constante suft la cration
dun de ses objets, bien que ce soit une classe. Ce nest pas le cas pour les autres classes. Pour
crer leurs objets, il faut imprativement utiliser loprateur new.
A linverse des constantes chane, les constantes des nombres et des caractres ne crent pas
dobjet. Leurs types de donnes primaires dnissent des nombres et des caractres, mais lef-
cacit veut quils ne soient pas des objets rels. Pour les traiter comme des objets, il faut les
entourer dobjets-crans. Cest lun des thmes de ce chapitre, dans la section "Conversion
dobjets et de types de donnes primaires".
Oprateur new
Les objets sont crs au moyen de loprateur new. Pour cela, new doit tre suivi du nom de la
classe dans laquelle lobjet est cr, et de parenthses. Les exemples suivants crent de nouvel-
les instances des classes String, Random et Motorcycle, et stockent ces nouvelles instances dans
des variables de types adquats :
String str = new String();
Random r = new Random();
Motorcycle m2 = new Motorcycle();
Info
part 01 Page 84 lundi 1 dcembre 1997 10:05
85
L E P R O G R A M M E U R
Les parenthses sont importantes, ne les oubliez pas. Quand elles sont vides, comme dans
lexemple ci-avant, un objet basique est cr. Si elles contiennent des arguments, ceux-ci dter-
minent les valeurs initiales des variables dinstance, ou toute autre qualit initiale de lobjet :
Date dt = new Date(90, 4, 1, 4, 30);
Point pt = new Point(0,0);
Le nombre et le type des arguments de new lintrieur des parenthses sont dnis par la classe
elle-mme, au moyen dune mthode spciale appele constructeur (nous reviendrons sur les
constructeurs au cours du prsent chapitre). Si vous essayez de crer une nouvelle instance
dune classe avec un mauvais nombre ou un mauvais type darguments (ou si vous omettez les
arguments alors quils sont ncessaires), vous obtiendrez une erreur la compilation. Voici un
exemple de cration de diffrents types dobjets utilisant des nombres et des types darguments
diffrents. La classe Date, qui fait partie du package java.util, cre des objets qui reprsentent
la date courante. Le Listing 4.1 dcrit trois faons diffrentes de crer un objet Date avec lop-
rateur new.
Listing 4.1 Programme Date de Laura
1: import java.util.Date;
2:
3: class CreateDates {
4:
5: public static void main (String args[]) {
6: Date d1, d2, d3;
7:
8: d1 = new Date();
9: System.out.println("Date 1: " + d1);
10:
11: d2 = new Date(71, 7, 1, 7, 30);
12: System.out.println("Date 2: " + d2);
13:
14: d3 = new Date("April 3 1993 3:24 PM");
15: System.out.println("Date 3: " + d3);
16: }
17: }
Rsultat :
Date 1: Sun Nov 26 19:10:56 PST 1995
Date 2: Sun Aug 01 07:30:00 PDT 1971
Date 3: Sat Apr 03 15:24:00 PST 1993
Dans cet exemple, trois objets Date diffrents sont crs grce aux diffrents arguments trans-
mis la classe indique aprs new. Pour le premier objet (ligne 8), loprateur new ne prend pas
dargument. Le rsultat (voir la premire ligne de sortie standard) est un objet Date avec la date
du jour.
part 01 Page 85 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 86
4
Le second objet Date contient cinq arguments entiers. Ils reprsentent une date : anne, mois,
jour, heures et minutes. Le rsultat est un objet Date avec : Sun Aug 01 07:30:00 PDT 1971.
Java numrote les mois en commenant par 0. Ainsi, bien que vous vous attendiez ce que le
7me mois soit juillet, en Java il sagit en fait du mois daot.
La troisime version de Date reoit un unique argument : une date sous forme de chane de
caractres. La chane est analyse et lobjet Date est cr (voir troisime ligne du rsultat). Une
chane date prend de nombreuses formes diffrentes, dcrites dans la documentation API four-
nie avec le package java.util.
Oprations ralises par new
La programmation de loprateur new dclenche une srie dactions. Dabord, un nouvel objet
dune classe donne est cr, et de la mmoire lui est alloue. Puis, une mthode particulire,
dnie dans la classe concerne, est appele. Cette mthode est un constructeur. Les construc-
teurs sont des mthodes spciales, dnies dans les classes, qui servent crer et initialiser de
nouvelles instances de ces classes.
Les constructeurs initialisent lobjet et ses variables et crent tous les autres objets dont cet objet
peut lui-mme avoir besoin ; ils effectuent en fait toutes les autres oprations dont le nouvel
objet a besoin pour tre initialis.
Diffrentes dnitions de constructeurs dans une classe peuvent avoir diffrents nombres ou
types darguments. Ainsi, le constructeur appel correspond aux arguments passs new. Cela
explique lexemple prcdent : chacune des versions de new correspond un rsultat diffrent.
Pour obtenir diffrents comportements dune classe, il suft de dnir autant de constructeurs
que lon souhaite de comportements diffrents pour cette classe (voir Chapitre 7).
Gestion de la mmoire
Dans Java, la gestion de la mmoire est dynamique et automatique. Java alloue automatique-
ment la mmoire ncessaire chaque nouvel objet cr ; aucune action explicite nest nces-
saire.
Lopration inverse est elle aussi automatique. Lorsque vous navez plus besoin dun objet, vous
attribuez de nouvelles valeurs toutes les variables qui pourraient le contenir, et vous lliminez
de tous les tableaux o il gurait ; lobjet devient ainsi inutilisable. Java possde un programme
rcuprateur de mmoire, parfois appel aussi ramasse-miettes. Ce programme recherche les
objets inutiliss et libre la mmoire quils occupent. Il nest donc pas ncessaire de librer
explicitement la mmoire, il suft de vous assurer que vous ne maintenez pas quelque part un
objet dont vous voulez vous dbarrasser. Le Chapitre 21, traite du rle et du fonctionnement du
programme rcuprateur de mmoire.
Attention
part 01 Page 86 lundi 1 dcembre 1997 10:05
87
L E P R O G R A M M E U R
Ce programme est un outil spcial de lenvironnement Java recherchant les objets inutiliss.
Lorsquil en trouve, il les limine et libre la mmoire quils utilisaient.
Variables dinstance et de classe :
accs, fixation dune valeur
Lobjet obtenu ce stade peut contenir des variables dinstance ou de classe. Travailler avec ces
dernires est ais. Elles se comportent comme les variables locales du chapitre prcdent. Seul
le mode daccs est lgrement diffrent.
Accs aux valeurs
Pour obtenir la valeur dune variable dinstance, on se sert dune expression conforme la nota-
tion point.
Avec la notation point, la rfrence une variable dinstance ou de classe est compose de deux
parties : lobjet, gauche du point, et la variable, droite.
La notation point sert rfrencer, au moyen dune expression, des variables dinstance et des
mthodes dinstance gurant dans un objet.
Soit un objet attribu la variable myObject. Sil possde une variable appele var, vous vous
rfrez la valeur de cette variable de la manire suivante :
myObject.var;
Cette forme daccs aux variables est une expression (elle retourne une valeur) et les deux par-
ties spares par le point peuvent galement tre des expressions. Il est donc possible dimbri-
quer des accs aux variables dinstance. Si var contient elle-mme un objet ayant sa propre
variable dinstance appele state, la valeur de cette dernire sobtient ainsi :
myObject.var.state;
Les expressions points sont values de gauche droite. Dans lexemple, la variable var de
myObject est traite en premier. Comme elle pointe sur un autre objet comportant la variable
state, celle-ci est ensuite prise en compte. Le rsultat final est la valeur de la variable state,
aprs valuation de lexpression complte.
Mise jour des valeurs
Pour attribuer une valeur une variable, il suft dajouter loprateur daffectation sa droite :
myObject.var.state = true;
part 01 Page 87 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 88
4
Lexemple de programme prsent dans le Listing 4.2 teste et modie les variables dinstance
dun objet Point. Point appartient au package java.awt et rfrence les coordonnes dun point
laide des valeurs x et y.
Listing 4.2. La classe TestPoint
1: import java.awt.Point;
2:
3: class TestPoint {
4: public static void main(String args[]) {
5: Point thePoint = new Point(10,10);
6:
7: System.out.println("X is " + thePoint.x);
8: System.out.println("Y is " + thePoint.y);
9:
10: System.out.println("Setting X to 5.");
11: thePoint.x = 5;
12: System.out.println("Setting Y to 15.");
13: thePoint.y = 15;
14:
15: System.out.println("X is " + thePoint.x);
16: System.out.println("Y is " + thePoint.y);
17:
18: }
19:}
Rsultat :
X is 10
Y is 10
Setting X to 5.
Setting Y to 15.
X is 5
Y is 15
Dans cet exemple, lobjet Point est cr avec la valeur 10 pour X et Y (ligne 5). Les lignes 7 et 8
les afchent laide de la notation point. Les lignes 10 13 remplacent les valeurs de ces varia-
bles par 5 et 15. Enn, les lignes 15 et 16 afchent nouveau les valeurs de X et Y pour preuve
de la mise jour.
Variables de classe
Les variables de classe sont dnies et stockes dans la classe elle-mme. Leurs valeurs sappli-
quent la classe et tous ses objets.
Le fonctionnement des variables dinstance diffre de celui des variables de classe. Pour les pre-
mires, chaque nouvelle instance de classe rcupre une copie des variables dinstance dnies
par cette classe. Chaque instance met ainsi jour la valeur de ces variables. Il ny a pas dinter-
part 01 Page 88 lundi 1 dcembre 1997 10:05
89
L E P R O G R A M M E U R
frence avec une autre instance. Pour les secondes, il existe une seule copie de la variable. Cha-
que instance de classe y accde, mais il ny a quune valeur. Quand elle est modie, elle lest
pour toutes les instances de la classe.
Les variables de classe sont dnies avec le mot cl static plac devant la variable. Ce sujet
est trait en dtail dans le Chapitre 6. Soit cet extrait dune dnition de classe :
class FamilyMember {
static String surname = "Johnson";
String name;
int age;
...
}
Les instances de la classe FamilyMember ont chacune leurs propres valeurs pour name et age.
A linverse, la variable de classe surname a une seule valeur pour tous les membres de la famille.
Si la valeur de surname est modie, toutes les instances de FamilyMember le sont aussi.
Laccs aux variables de classe et dinstance utilise la mme notation. Pour accder ou modier
la valeur dune variable de classe, lobjet ou le nom de la classe doit prcder le point. Les deux
lignes afches par le code suivant sont identiques :
FamilyMember dad = new FamilyMember();
System.out.println("Familys surname is: " + dad.surname);
System.out.println("Familys surname is: " + FamilyMember.surname);
Avec la possibilit de modier la valeur dune variable de classe laide dune instance, il est
facile de se perdre entre les variables de classe et lorigine de leurs valeurs. Cest pourquoi il
vaut mieux rfrencer une variable de classe laide du nom de la classe. Le code est alors com-
prhensible et les rsultats fantaisistes plus faciles corriger.
Appel des mthodes
Lappel dune mthode est similaire la rfrence aux variables dinstance dun objet : les
appels de mthodes dans des objets utilisent aussi la notation point. Lobjet est plac gauche
du point, la mthode et ses arguments droite :
myObject.methodOne (arg1, arg2, arg3);
Toutes les mthodes doivent tre suivies de parenthses, mme si elles nont pas darguments :
myObject.methodNoArgs();
Si la mthode appele est un objet qui contient aussi des mthodes, ces dernires simbriquent,
comme pour les variables. Lexemple suivant appelle la mthode getName, dnie dans lobjet
retourn par la mthode getClass, elle-mme dnie dans myObject.
myObject.getClass().getName();
part 01 Page 89 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 90
4
Les appels imbriqus de mthodes peuvent se combiner avec des rfrences des variables
dinstance galement imbriques. Dans lexemple suivant, vous appelez la mthode
methodTwo(), dfinie dans lobjet stock par la variable dinstance var, qui fait elle-mme partie
de lobjet myObject.
myObject.var.methodTwo(arg1, arg2);
La mthode System.out.println() est un bon exemple de variables et de mthodes imbriques.
La classe System (du package java.lang) dcrit les comportements propres au systme. System.out
est une variable de classe. Elle contient une instance de la classe PrintStream qui pointe sur la
sortie standard du systme. Les instances de PrintStream ont une mthode println() qui
envoie une chane dans le ux de sortie.
Le Listing 4.3 prsente un exemple dappels de mthodes dnies dans la classe String. Celle-
ci comprend des mthodes pour les tests et les modications de chanes.
Listing 4.3 Exemples dutilisation des mthodes de String
1: class TestString {
2:
3: public static void main (String args[]) {
4: String str = "Now is the winter of our discontent";
5:
6: System.out.println("The string is : " + str);
7: System.out.println("Length of this string : "
8: + str.length());
9: System.out.println("The character at position 5 : "
10: + str.charAt(5));
11: System.out.println("The substring from 11 to 18 : "
12: + str.substring(11, 18));
13: System.out.println("The index of the character d : "
14: + str.indexOf(d));
15: System.out.print("The index of the beginning of the ");
16: System.out.println("substring \"winter\":"
17: + str.indexOf("winter"));
18: System.out.println("The string in upper case : "
19: + str.toUpperCase());
20: }
21: }
Rsultat :
The string is: Now is the winter of our discontent
Length of this string: 35
The character at position 5: s
The substring from positions 11 to 18: winter
The index of the character d: 25
The index of the beginning of the substring "winter": 11
The string in upper case: NOW IS THE WINTER OF OUR DISCONTENT
part 01 Page 90 lundi 1 dcembre 1997 10:05
91
L E P R O G R A M M E U R
Une nouvelle instance de String est cre en ligne 4 laide dune constante chane (cest plus
facile que de passer par new et de rentrer les caractres individuellement). La suite du pro-
gramme appelle simplement diffrentes mthodes de String pour effectuer des oprations sur
la chane :
G La ligne 6 afche la valeur de la chane cre en ligne 4 : "Now is the winter of our discon-
tent".
G La ligne 7 appelle la mthode length() dans le nouvel objet String. Cette chane a une lon-
gueur de 35 caractres.
G La ligne 9 appelle la mthode charAt(). Elle retourne le caractre situ la position donne
dans la chane. Comme la premire position est 0, le caractre en position 5 est s.
G La ligne 11 appelle la mthode substring(). Elle reoit deux entiers reprsentant un inter-
valle et retourne la sous-chane des caractres situs dans cet intervalle. La mthode sub-
string() peut aussi tre appele avec un seul argument. Elle retourne alors la sous-chane
qui commence cette position et se termine en n de chane.
G La ligne 13 appelle la mthode indexOf(). Elle retourne la position de la premire occur-
rence du caractre donn (ici d).
G La ligne 15 montre un autre usage de la mthode indexOf(). Elle reoit un argument chane
et retourne lindex du dbut de cette chane.
G La ligne 19 utilise la mthode toUpperCase(). Elle retourne une copie de la chane en majus-
cules.
Mthodes de classe
Comme les variables de classe, les mthodes de classe sappliquent la classe tout entire et
non ses instances. Elles sont souvent utilises pour des mthodes vocation gnrale. Ces der-
nires noprent pas directement sur une instance de la classe, mme sil y a adquation dun
point de vue conceptuel. Par exemple, la classe String contient une mthode de classe appele
valueOf() qui reoit lun des nombreux types dargument (entiers, boolens, autres objets,
etc.). valueOf() retourne ensuite une instance de String(), contenant la valeur chane de largu-
ment transmis. Cette mthode nopre pas directement sur une instance de String existante.
Cependant, rcuprer une chane partir dun autre objet ou type de donnes est bien une op-
ration de style chane. Elle a donc toute sa place dans la classe String.
Les mthodes de classe servent aussi grouper au mme endroit, dans une classe, des mthodes
caractre gnral. Par exemple, la classe Math dnie dans le package java.lang contient de
nombreuses mthodes de classe. Ce sont des oprations mathmatiques. Il nexiste pas dins-
tance de la classe Math, mais on peut utiliser ses mthodes avec des arguments numriques ou
boolens. Par exemple, la mthode de classe Math.max() prend deux arguments et retourne le
part 01 Page 91 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 92
4
plus grand des deux. Il nest pas ncessaire de crer une nouvelle instance de Math ; il suft
dappeler la mthode l o on en a besoin, comme suit :
in biggerOne = Math.max(x,y);
Lappel des mthodes de classe utilise la notation point, comme lappel des mthodes dins-
tance. La classe ou lune de ses instances est gauche du point. Cette syntaxe est identique
celle employe pour les variables de classe. Cependant, lemploi du nom de la classe facilite la
lecture du code, pour les raisons dj voques avec les variables de classe. Les deux dernires
lignes de lexemple suivant produisent le mme rsultat (la chane "5") :
String s, s2;
s = "foo";
s2 = s.valueOf(5);
s2 = String.valueOf(5);
Rfrences aux objets
Mme si elles sont occultes, les rfrences aux objets manipuls sont importantes. Lorsque des
objets sont attribus des variables ou passs en arguments une mthode, ce sont leurs rf-
rences qui sont transmises. En effet, ni les objets eux-mmes, ni leur copie ne sont passs.
Le Listing 4.4 est un exemple simple illustrant le fonctionnement des rfrences.
Listing 4.4. Exemple de rfrences
1: import java.awt.Point;
2:
3: class ReferencesTest {
4: public static void main (String args[]) {
5: Point pt1, pt2;
6: pt1 = new Point(100, 100);
7: pt2 = pt1;
8:
9: pt1.x = 200;
10: pt1.y = 200;
11: System.out.println("Point1: " + pt1.x + ", " + pt1.y);
12: System.out.println("Point2: " + pt2.x + ", " + pt2.y);
13: }
14: }
Rsultat :
Point1: 200, 200
Point2: 200, 200
part 01 Page 92 lundi 1 dcembre 1997 10:05
93
L E P R O G R A M M E U R
Dans la premire partie de ce programme, on dclare deux variables de type Point (ligne 5), on
cre un nouvel objet Point affect pt1 (ligne 6), et, enn, on affecte pt2 la valeur de pt1
(ligne 7).
La question est : aprs la mise jour des variables dinstance x et y de pt1 par les lignes 9 et 10,
que devient pt2 ?
Comme vous pouvez le voir, les variables dinstance x et y de pt2 ont galement t modies,
bien quon ne lait pas fait explicitement. Laffectation de la valeur de pt1 pt2 a vritablement
cr partir de pt2 une rfrence lobjet point par pt1, comme on peut le voir sur la
Figure 4.1. Quand lobjet rfrenc par pt2 est modi, celui sur lequel pointe pt1 lest gale-
ment, parce quil sagit de deux rfrences au mme objet.
Pour que pt1 et pt2 pointent sur des objets distincts, il faut coder new Point() sur chacune des
deux lignes pour crer deux objets distincts.
Lutilisation des rfrences prend toute son importance lorsque des arguments sont transmis aux
mthodes, comme vous le verrez plus loin dans ce mme chapitre.
Java nautorise ni les pointeurs explicites, ni les oprations arithmtiques sur les pointeurs, uti-
liss dans les langages de type C. Vous disposez uniquement de rfrences, mais celles-ci com-
portent la plupart des possibilits des pointeurs, sans entraner la confusion et les bogues
insidieux rsultant de lutilisation des pointeurs explicites.
Conversion de types
de donnes primaires et dobjets
Parfois, certaines valeurs sont stockes dans un type qui ne convient pas pour ce que vous vou-
lez en faire. Cela peut tre linstance dune mauvaise classe, un nombre virgule ottante
(float) au lieu dun entier (int), ou un entier au lieu dune chane. Le mcanisme consistant
transformer la valeur dun type vers un autre est une conversion.
La conversion est un mcanisme qui, partir dun objet ou dune valeur dun certain type, cre
un autre objet ou une autre valeur de type diffrent. Le rsultat de la conversion est un nouvel
objet ou une nouvelle valeur. La conversion naffecte pas lobjet ou la valeur dorigine.
x: 200
y: 200
Objet Point
pt1
pt2
Figure 4.1
Rfrences des objets.
Astuce
Info
part 01 Page 93 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 94
4
Le concept de conversion est simple, mais les rgles spciant quels types peuvent tre conver-
tis dans dautres types sont compliques en Java par lexistence de types primaires dune part
(int, float, boolean), et de types dobjets dautre part (string, Point, Window, etc.). Trois formes
de conversions sont abordes dans cette section :
G Conversion entre types primaires : un entier (int) vers un nombre virgule ottante (float)
ou un float vers un double.
G Conversion entre types dobjet : une instance de classe vers celle dune autre classe.
G Conversion de types primaires en objets et vice versa.
Conversion des types primaires
La conversion des types primaires consiste convertir la valeur dun type primaire dans un
autre. Un exemple : laffectation dun nombre de type x une variable de type y. Cette opration
est frquente sur des types numriques. Les valeurs boolennes ne peuvent pas tre converties
en dautres types primaires.
Les conversions vers un type plus "grand" que celui de la valeur transformer peuvent ne pas
tre explicites. Vous pouvez le plus souvent traiter automatiquement (conversion implicite) un
type byte ou character comme un long, un int ou un float, et nimporte lequel des types pr-
cdents comme un double. Dans la plupart des cas, le type le plus grand apporte une prcision
suprieure et aucune information nest perdue lors de la conversion. Toutefois, la conversion
dentiers valeurs virgule ottante fait exception cette rgle gnrale ; la conversion dun int
ou dun long en un float, ou dun long en un double, peut entraner une perte de prcision.
Une conversion dune valeur dans un type plus "petit" que le sien doit tre explicite, la conver-
sion pouvant entraner une perte de prcision. La conversion explicite utilise le format suivant :
(typename) value
Dans cette instruction, typename est le nom du type dans lequel value (une expression) doit tre
convertie (en short, int, float, boolean, par exemple). Lexpression suivante divise x par y et
convertit le rsultat en type int :
(int) (x / y);
La conversion est prioritaire sur les oprations arithmtiques, do lemploi des parenthses
dans notre exemple, pour que la conversion porte bien sur le rsultat de la division. Autrement, la
valeur de x serait dabord convertie, puis divise par y, ce qui pourrait donner un rsultat diffrent.
Conversion des objets
Les instances dune classe peuvent aussi tre converties en instances dautres classes, une
condition : les classes des objets convertir et convertis doivent tre lies par le mcanisme
dhritage. Autrement dit, la conversion dun objet nest possible que vers une instance dune
sous-classe ou dune super-classe de sa propre classe.
part 01 Page 94 lundi 1 dcembre 1997 10:05
95
L E P R O G R A M M E U R
Dune manire analogue la conversion de valeurs vers un type plus "grand", la conversion de
certains objets nest pas obligatoirement explicite. En effet, les instances de sous-classes contien-
nent gnralement toutes les informations des instances des super-classes. Il est donc possible
dutiliser une instance dune sous-classe l o lon sattend utiliser une instance dune de ses
super-classes. Par exemple, si une mthode reoit deux arguments, le premier de type Object et
le second de type Number, lui passer une instance de ces classes particulires nest pas obliga-
toire. En effet, pour largument de type Object, une sous-classe quelconque dObject (donc tout
objet) suft. De mme, pour largument de type Number, il suft de passer une instance dune
sous-classe de Number (Integer, Boolean, Float, etc.). Il nest pas ncessaire de faire dabord
une conversion explicite.
La conversion vers le bas dans la hirarchie des classes est automatique, mais la conversion vers
le haut ne lest pas. La conversion dun objet dans une instance dune de ses super-classes
entrane une perte des informations fournies par la sous-classe et doit, de ce fait, tre explicite.
La conversion dun objet vers une autre classe seffectue par la mme opration que celle utili-
se pour les types de donnes primaires :
(classname) object
Dans cette instruction, classname est le nom de la classe dans laquelle object (une rfrence
un objet) doit tre converti. La conversion cre une rfrence, du type classname, lancien
objet. Lancien objet continue dexister sans subir de changement.
Voici un exemple de conversion dune instance de la classe GreenApple vers la classe Apple (o
GreenApple est une sous-classe de Apple, contenant des informations supplmentaires pour dfi-
nir la pomme comme verte) :
GreenApple a;
Apple a2;
a = new GreenApple();
a2 = (Apple) a;
La conversion des objets peut seffectuer non seulement vers des classes, mais aussi vers des
interfaces. La conversion nest possible que si la classe de lobjet, ou lune de ses super-classes,
implmente effectivement linterface. Ce type de conversion autorise lappel dune des mtho-
des de linterface, mme si cette dernire nest pas effectivement implmente par la classe de
lobjet. Les interfaces sont traites plus en dtail dans la troisime partie de ce livre.
Transformation de types primaires en objets et vice versa
Vous avez vu comment convertir un type de donnes primaire vers un autre, et comment effec-
tuer des conversions entre classes. Peut-il y avoir des conversions dun type primaire vers une
classe ou dans lautre sens ?
La rponse est non. Les types de donnes primaires et les objets sont deux choses trs diffrentes
en Java. Par consquent, il nest pas possible de convertir lune en lautre. Cependant, le package
part 01 Page 95 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 96
4
java.lang contient des classes spciales qui correspondent chaque type de donnes primaire :
Integer pour les entiers, Float pour les nombres virgule flottante, Boolean pour les boolens,
etc. Notez que les noms de classes commencent par une lettre majuscule, et les types de donnes
primaires par une minuscule. Java traite ces noms de manire trs diffrente, aussi ne les confon-
dez pas, car vos variables et vos mthodes ne se comporteraient pas comme prvue.
Grce aux mthodes de classe dnies dans ces classes, on peut crer un quivalent objet pour
tous les types de base, laide de loprateur new. La ligne de code suivante cre une instance
de la classe Integer avec la valeur 35 :
Integer intObject = new Integer(35);
Disposant dobjets rels, vous pouvez traiter ces valeurs comme des objets. Ensuite, sil savre
ncessaire de revenir aux valeurs de type primaire, vous disposez de mthodes pour ce faire. Par
exemple, intvalue() extrait une valeur de type int dun objet Integer :
int theInt = intObject.intValue() ; // retourne 35
Consultez la documentation Java API relative ces classes particulires pour plus de prcisions
sur la conversion des types de donnes primaires en objets et inversement.
Java 1.0 fournit les classes spciales suivantes correspondant aux types primaires : Boolean,
Character, Double, Float, Integer et Long. Java 1.1 comporte en outre les classes Byte et short,
ainsi quune classe enveloppe spciale, Void. Ces dernires classes sont principalement utili-
ses pour la rexion des objets.
Complments divers
Cette section regroupe diverses informations complmentaires sur la manipulation des objets.
En particulier :
G Comparaison dobjets.
G Identication de la classe dun objet.
G Test dun objet pour dterminer sil sagit dune instance dune classe donne.
Comparaison des objets
Le chapitre prcdent fournit une liste doprateurs destins la comparaison de valeurs : gal,
diffrent, infrieur, etc. La plupart dentre eux ne marchent quavec des types de donnes pri-
maires, et pas avec des objets. Si leurs oprandes ne sont pas des nombres, le compilateur Java
produit des erreurs.
Les oprateurs == (gal) et != (diffrent) font exception cette rgle : utiliss avec des objets,
ils vrient les deux oprandes font rfrence au mme objet en mmoire.
Info
part 01 Page 96 lundi 1 dcembre 1997 10:05
97
L E P R O G R A M M E U R
Pour obtenir un rsultat signicatif lors de la comparaison dobjets dune classe, il faut crer
des mthodes spciales dans la classe et les appeler.
Dans Java, le polymorphisme nexiste pas pour les oprateurs, ce qui veut dire quil nest pas
possible de rednir le comportement des oprateurs en utilisant des mthodes dans les classes.
Les oprateurs prvus dans Java sont dnis uniquement pour les nombres.
La classe String illustre bien ce quest la comparaison dobjets. Elle permet davoir deux cha-
nes (deux objets indpendants) en mmoire avec les mmes valeurs, cest--dire les mmes
caractres placs dans le mme ordre. Vis--vis de loprateur ==, ces deux objets String ne sont
pas gaux, car, mme si leur contenu est identique, ils ne reprsentent pas le mme objet.
Cependant, la classe String possde une mthode appele equals(). Cette mthode teste chaque
caractre de deux chanes et retourne la valeur true sil y a galit parfaite (voir Listing 4.5).
Listing 4.5 Test dgalit des chanes
1: class EqualsTest {
2: public static void main(String args[]) {
3: String str1, str2;
4: str1 = "les chemises de larchiduchesse sont sches.";
5: str2 = str1;
6:
7: System.out.println("String1: " + str1);
8: System.out.println("String2: " + str2);
9: System.out.println("Same object? " + (str1 == str2));
10:
11: str2 = new String(str1);
12:
13: System.out.println("String1: " + str1);
14: System.out.println("String2: " + str2);
15: System.out.println("Same object? " + (str1 == str2));
16: System.out.println("Same value? " + str1.equals(str2));
17: }
18: }
Rsultat :
String1: les chemises de larchiduchesse sont sches.
String2: les chemises de larchiduchesse sont sches.
Same object? true
String1: les chemises de larchiduchesse sont sches.
String2: les chemises de larchiduchesse sont sches.
Same object? false
Same value? true
Info
part 01 Page 97 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 98
4
La premire partie du programme (lignes 3 5) dclare deux variables (str1 et str2) et affecte
la constante Les chemises de larchiduchesse sont sches str1 puis la valeur de str1 str2.
Comme nous lavons vu prcdemment lors de ltude des rfrences dobjets, str1 et str2
pointent maintenant sur le mme objet et le test de la ligne 9 le conrme.
Dans la seconde partie, new cre un nouvel objet String ayant la mme valeur que str1, et
affecte str2 ce nouvel objet de type chane. Il y a maintenant deux objets String diffrents
(leurs rfrences sont diffrentes) avec la mme valeur. La ligne 15 les teste laide de lopra-
teur == pour savoir sil sagit du mme objet. Comme prvu, la rponse est non. De mme, le
test dgalit sur leurs valeurs, effectu avec la mthode equals() en ligne 16, retourne true :
elles ont la mme valeur.
Pourquoi ne pas utiliser une autre constante au lieu de new lors de la modication de str2 ?
Les constantes chane (String) sont optimises dans Java. Ainsi, la cration dune chane via
une constante, puis lutilisation dune autre constante avec les mmes caractres, dclenchent
loptimisation. Java redonne le premier objet String. Les deux chanes reprsentent alors le
mme objet. Pour crer deux objets diffrents, il faut employer une technique diffrente.
Identification de la classe dun objet
Voici comment identier la classe dun objet attribu la variable obj :
String name = obj.getClass().getName() ;
getClass() est une mthode de la classe Object. Elle est donc disponible pour tous les objets.
De lappel de cette mthode rsulte un objet de la classe Class. Il contient une mthode appele
getname() qui retourne le nom de la classe sous forme de chane.
Loprateur instanceof permet aussi de raliser des tests. Il a deux oprandes : un objet, gau-
che, et le nom dune classe, droite. Lexpression retourne true si lobjet appartient la classe
dsigne ou lune de ses sous-classes, et false dans le cas contraire :
"foo" instanceof String // true
Point pt = new Point(10,10);
pt instanceof String // false
Loprateur instanceof sutilise aussi avec les interfaces. Si un objet implmente une interface,
instanceof, avec le nom de linterface droite, retourne la valeur true. Les interfaces sont trai-
tes dans la troisime partie de ce livre.
Info
part 01 Page 98 lundi 1 dcembre 1997 10:05
99
L E P R O G R A M M E U R
Inspection des classes et des mthodes
par la rflexion
Lune des amliorations apportes au langage Java par la diffusion 1.1 est lintroduction de la
rexion (en anglais, reection), aussi appele introspection. La rexion permet une classe
Java, telle quun programme que vous crivez, dobtenir des prcisions sur nimporte quelle
autre classe.
Grce la rexion, un programme Java peut charger une classe dont il ne sait rien, en dcouvrir
les variables, les mthodes et les constructeurs, et travailler avec ces lments.
Un exemple permettra de voir demble ce dont il sagit. Le Listing 4.6 montre une brve appli-
cation appele seeMethods.
Listing 4.6 Texte intgral de SeeMethods.java
1: import java.lang.reflect.*;
2: import java.util.Random;
3:
4: class SeeMethods {
5: public static void main(String[] argumentss) {
6: Random rd = new Random();
7: Class className = rd.getClass();
8: Method[] methods = className.getMethods();
9: for (int i = 0; i < methods.length; i++) {
10: System.out.println("Method: " + methods[i]);
11: }
12: }
13: }
Ce programme utilise le groupe de classes java.lang.reflect.*, qui fournit des informations
sur les attributs, les mthodes et les constructeurs de nimporte quelle classe.
Lapplication SeeMethods cre un objet Random la ligne 6, puis utilise la rexion pour afcher
toutes les mthodes publiques faisant partie de la classe. Le Listing 4.7 montre la sortie de cette
application.
Listing 4.7. La sortie de lapplication SeeMethods
1: Method: public final native java.lang.Class java.lang.Object.getClass()
2: Method: public native int java.lang.Object.hashCode()
3: Method: public boolean java.lang.Object.equals(java.lang.Object)
4: Method: public java.lang.String java.lang.Object.toString()
5: Method: public final native void java.lang.Object.notify()
6: Method: public final native void java.lang.Object.notifyAll()
part 01 Page 99 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 100
4
7: Method: public final native void java.lang.Object.wait(long)
8: Method: public final void java.lang.Object.wait(long,int)
9: Method: public final void java.lang.Object.wait()
10: Method: public synchronized void java.util.Random.setSeed(long)
11: Method: public void java.util.Random.nextBytes(byte[])
12: Method: public int java.util.Random.nextInt()
13: Method: public long java.util.Random.nextLong()
14: Method: public float java.util.Random.nextFloat()
15: Method: public double java.util.Random.nextDouble()
16: Method: public synchronized double java.util.Random.nextGaussian()
En utilisant la rexion, lapplication SeeMethods peut connatre chacune des mthodes de la
classe Random, ainsi que toutes les mthodes quelle a hrit de ses super-classes. Chaque ligne
du listing donne les informations suivantes sur une mthode :
G Mthode public ou non
G Type dobjet ou de variable retourn par la mthode
G Mthode de la classe ou dune de ses super-classes
G Nom de la mthode
G Types des objets ou des variables utiliss comme arguments lors de lappel de la mthode
Lapplication SeeMethods pourrait tre utilise avec nimporte quelle classe dobjets. Il suft de
changer la ligne 6 de SeeMethods.java pour crer un objet diffrent et examiner ses mcanismes
internes.
La rexion est surtout utilise par des outils servant parcourir des classes, ou par des dbo-
gueurs, pour obtenir plus dinformations sur les classes ou les objets examins ou en cours de
mise au point. On sen sert aussi avec JavaBeans, pour sinformer sur un autre objet et dcouvrir
ce quil peut faire (en vue de lui demander de faire quelque chose), ce qui facilite la construction
dapplications dune bonne envergure. Le Chapitre 14 donne plus de prcisions sur JavaBeans.
Le package java.lang.reflect comporte les classes suivantes :
G Field, pour obtenir et grer linformation sur les variables de classe et dinstance.
G Method, pour les mthodes de classe et les mthodes dinstance.
G Constructor, pour les mthodes spciales servant la cration de nouvelles instances des
classes.
G Array, pour les tableaux.
G Modifier, pour dcoder les informations de modification relative aux classes, aux variables
et aux mthodes (les modicateurs sont traits au Chapitre 15).
Un certain nombre de nouvelles mthodes seront en outre disponibles au sein dune classe appe-
le class, pour faire le lien entre les diverses classes de rexion.
La rexion est une fonction avance que vous nutiliserez peut-tre pas tout de suite dans vos
programmes. Elle prsente un grand intrt pour la srialisation des objets, JavaBeans, ou
dautres types de programmes sophistiqus.
part 01 Page 100 lundi 1 dcembre 1997 10:05
101
L E P R O G R A M M E U R
Bibliothque de classes Java
La bibliothque de classes Java comprend lensemble des classes dont la fourniture est assure
pour tout environnement Java de caractre commercial (par exemple, tout environnement de
dveloppement Java ou tout navigateur comme celui de Netscape). Ces classes se trouvent dans
le package Java. Toutes celles qui ont t tudies jusqu prsent en font partie, comme
dailleurs un grand nombre dautres classes prsentes plus loin dans cet ouvrage, et dautres
encore que vous ne connatrez peut-tre jamais.
Le JDK est livr avec une documentation sur la totalit de la bibliothque de classes Java. Cette
documentation dcrit les variables dinstance de chaque classe, les mthodes, les constructeurs,
les interfaces, etc. Vous pouvez vous la procurer (elle sappelle Java Application Programmers
Interface, ou API) via le Web http://java.sun.com:80/products/JDK/CurrentRelease/api/
packages.html. Un court rsum de lAPI Java se trouve en Annexe C. Parcourir la bibliothque
de classes Java avec ses mthodes et ses variables dinstance est un bon moyen de savoir ce que
Java peut ou ne peut pas faire, et de voir de quelle manire ces lments peuvent servir de point
de dpart de vos propres dveloppements.
Les packages suivants font partie de la bibliothque de classes Java :
G java.lang : ses classes concernent le langage lui-mme. Object, String et System en font
partie. Ce package contient aussi des classes spciales destines la reprsentation des types
de donnes primaires (Integer, Character, Float, etc.). La premire partie du prsent
ouvrage donne au moins un aperu de la plupart des classes de ce package.
G java.util : ces classes sont des utilitaires, comme Date, ou de simples classes de collec-
tions, comme Vector et Hashtable.
G java.io : ces classes crivent ou lisent dans les flux dentres/sorties (comme lentre ou la
sortie standard), ou encore, grent les chiers. Le Chapitre 19, est consacr aux classes de
ce package.
G java.net : ce sont des classes de gestion de rseau, comme Socket et URL (une classe per-
mettant de rfrencer des documents sur le World wide Web). Le Chapitre 14 donne quel-
ques indications supplmentaires sur les rseaux.
G java.awt (cest lAbstract Windowing Toolkit, ou jeu doutils de fentrage abstrait) : ces
classes permettent dimplmenter une interface utilisateur graphique. Window, Menu, Button,
Font, CheckBox, etc., en font partie. Ce package contient aussi des mcanismes de gestion
des vnements systme, et des classes de traitement dimages (le package java.awt.Image).
AWT est trait dans la seconde partie de louvrage.
G java.applet : ces classes servent implmenter des applets Java.
Outre les classes de Java, lenvironnement de dveloppement peut en contenir dautres, fournis-
sant dautres utilitaires ou des fonctions diffrentes. Elles sont certainement trs utiles, mais
nappartiennent pas la bibliothque Java standard. Dautres personnes essayant de faire marcher
part 01 Page 101 lundi 1 dcembre 1997 10:05
Travailler avec les objets
Java 1.1 102
4
vos programmes Java risquent de ne pas en disposer, moins que vous nincluiez explicitement
ces classes dans vos programmes. Ceci est particulirement important dans le cas des applets,
destines tourner sur de nombreuses plates-formes laide dun programme de navigation
compatible Java. Seules les classes contenues dans le package Java sont toujours disponibles
sur tous les programmes de navigation et dans tous les environnements Java.
Rsum
Des objets, toujours des objets. Ce chapitre a trait de leur manipulation : cration, recherche et
mise jour des valeurs de leurs variables, appel de leurs mthodes. Les mcanismes de copie,
de comparaison et de conversion dobjets ont eux aussi t tudis. Enn, vous avez dcouvert
la bibliothque de classes de Java (qui constitue une matire premire importante pour program-
mer).
Vous disposez dsormais des bases pour travailler avec les composants les plus simples du lan-
gage. Il vous reste tudier les tableaux, les instructions de contrle et les boucles. Cest le sujet
du prochain chapitre. Au Chapitre 6, vous apprendrez ensuite dnir et utiliser des classes
au sein des applications Java, et dans la seconde partie de louvrage, vous dboucherez directe-
ment sur les applets. La quasi-totalit de la programmation avec Java se rsume au concept
dobjet.
Questions rponses
Q Jai du mal faire la diffrence entre les objets et les types de donnes primaires
comme int et boolean.
R Les types de donnes primaires (byte, short, int, long, float, double et char) sont les plus
petites entits du langage. Ce ne sont pas des objets, mme sils peuvent, de diverses
manires, tre traits comme tel. Par exemple, il est possible de les affecter des variables
et de les passer aux mthodes comme arguments, ou de les obtenir en retour. Malgr tout, la
plupart des oprations portant sur les objets ne marchent pas avec les types de donnes
primaires.
Les objets sont des instances dune classe et, par consquent, des types de donnes bien
plus complexes que de simples nombres ou caractres. Ils contiennent souvent des nombres
et des caractres comme variables dinstance ou de classe.
Q Pas de pointeur en Java ? Sans pointeurs, comment pouvez-vous travailler avec des
listes lies, dans lesquelles un pointeur dune liste correspond une autre liste et
permet de les parcourir ?
part 01 Page 102 lundi 1 dcembre 1997 10:05
103
L E P R O G R A M M E U R
R Java nest pas totalement dpourvu de pointeurs ; il na pas de pointeur explicite. Les rf-
rences aux objets sont, en fait, des pointeurs. Ainsi, pour crer une entit du type liste lie,
vous crez une classe appele Node, qui aura une variable dinstance galement du type Node.
Pour lier ensemble les objets Node, il vous suft alors daffecter un objet Node la variable
dinstance de lobjet qui le prcde immdiatement dans la liste. Comme les rfrences aux
objets sont des pointeurs, les listes lies agences de cette manire se comporteront comme
vous pouvez le souhaiter.
Q Dans la section traitant de lappel des mthodes, une mthode tait appele avec un
nombre darguments diffrent chaque fois, et cela donnait des rsultats varis.
Comment est-ce possible ?
R Ce concept sappelle le polymorphisme. Pour un mme nom de fonction, il existe divers
comportements. Ils dpendent des arguments transmis au moment de lappel. Les arguments
varient en nombre et/ou en type. Les mthodes sont cres dans les classes avec des signa-
tures distinctes et des dnitions diffrentes. Lorsque la mthode est appele, Java recherche
la dnition correspondant au nombre et aux types des arguments transmis.
Ce sujet est trait au Chapitre 6.
Q Java tant bas sur C++, pourquoi le polymorphisme ne sapplique-t-il pas aux
oprateurs ?
R Java est effectivement bas sur le langage C++, mais il a galement t conu pour tre
simple. Cest pourquoi de nombreuses caractristiques de C++ ont disparu. Rednir les
oprateurs complique leur manipulation et la lecture du code. Les concepteurs de Java ont
donc choisi dabandonner cette caractristique de C++.
part 01 Page 103 lundi 1 dcembre 1997 10:05

Vous aimerez peut-être aussi