835
 

Au coeur de Java 6 - volume 1 Notions fondamentales - 8ème Edition

Embed Size (px)

Citation preview

Au cur de Java

volume 1 Notions fondamentales8e dition Cay S. Horstmann et Gary Cornell

Le prsent ouvrage est la traduction de Core Java, vol. I Fundamentals, 8e d., de Cay Hortsmann et Gary Cornell, publi par Pearson Education Inc./Prentice Hall, Copyright 2008 Sun Microsystem Inc. Authorized translation from the English language edition, entitled CORE JAVA, VOL. I FUNDAMENTALS, 8th Edition By CAY HORTSMANN and GARY CORNELL, published by Pearson Education Inc., publishing as Prentice Hall, Copyright 2008 Sun Microsystem Inc., 4150 Network Circle, Santa Clara, California 95054 USA. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. French language edition published by PEARSON EDUCATION FRANCE, Copyright 2008

Publi par Pearson Education France 47 bis, rue des Vinaigriers 75010 PARIS Tl. : 01 72 74 90 00 Mise en pages : TyPAO

Titre original : Core Java, volume 1 Fundamentals Traduit de lamricain par : Christiane Silhol et Nathalie Le Guillou de Penanros ISBN original : 0-13-235476-4 Copyright 2008 Sun Microsystems, Inc. Tous droits rservs

ISBN : 978-2-7440-4080-1 Copyright 2009 Pearson Education France Sun Microsystems Inc. 901 San Antonio Road, Palo Alto, California 94303 USA

Tous droits rservs. Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de la proprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sans le respect des modalits prvues larticle L. 122-10 dudit code.

Table des matires

Introduction .................................................................................................................................. Avertissement au lecteur .......................................................................................................... A propos de ce livre ................................................................................................................. Conventions .............................................................................................................................. Exemples de code ..................................................................................................................... Chapitre 1. Une introduction Java ......................................................................................... Java, plate-forme de programmation ........................................................................................ Les termes cls du livre blanc de Java ...................................................................................... Simplicit ............................................................................................................................ Orient objet ....................................................................................................................... Compatible avec les rseaux ............................................................................................... Fiabilit ............................................................................................................................... Scurit ............................................................................................................................... Architecture neutre ............................................................................................................. Portabilit ........................................................................................................................... Interprt ............................................................................................................................. Performances leves .......................................................................................................... Multithread ......................................................................................................................... Java, langage dynamique .................................................................................................... Les applets Java et Internet ...................................................................................................... Bref historique de Java ............................................................................................................. Les ides fausses les plus rpandues concernant Java .............................................................. Chapitre 2. Lenvironnement de programmation de Java ...................................................... Installation du kit de dveloppement Java ................................................................................ Tlcharger le JDK ............................................................................................................. Congurer le chemin dexcution ...................................................................................... Installer la bibliothque et la documentation ...................................................................... Installer les exemples de programmes ................................................................................ Explorer les rpertoires de Java ..........................................................................................

1 1 2 4 5 7 7 8 8 9 10 10 10 11 12 12 12 13 13 14 15 17 21 21 22 24 26 26 27

IV

Table des matires

Choix de lenvironnement de dveloppement .......................................................................... Utilisation des outils de ligne de commande ............................................................................ Conseils pour la recherche derreurs .................................................................................. Utilisation dun environnement de dveloppement intgr ...................................................... Localiser les erreurs de compilation ................................................................................... Excution dune application graphique .................................................................................... Elaboration et excution dapplets ........................................................................................... Chapitre 3. Structures fondamentales de la programmation Java ......................................... Un exemple simple de programme Java ................................................................................... Commentaires .......................................................................................................................... Types de donnes ..................................................................................................................... Entiers ................................................................................................................................. Types virgule ottante ...................................................................................................... Le type char ...................................................................................................................... Type boolen ....................................................................................................................... Variables ................................................................................................................................... Initialisation des variables ....................................................................................................... Constantes ........................................................................................................................... Oprateurs ................................................................................................................................ Oprateurs dincrmentation et de dcrmentation ............................................................ Oprateurs relationnels et boolens .................................................................................... Oprateurs binaires ............................................................................................................. Fonctions mathmatiques et constantes .............................................................................. Conversions de types numriques ...................................................................................... Transtypages ....................................................................................................................... Parenthses et hirarchie des oprateurs ............................................................................ Types numrs .................................................................................................................. Chanes ..................................................................................................................................... Sous-chanes ....................................................................................................................... Concatnation ..................................................................................................................... Les chanes sont inaltrables .............................................................................................. Test dgalit des chanes ................................................................................................... Points de code et units de code ......................................................................................... LAPI String .................................................................................................................... Lire la documentation API en ligne .................................................................................... Construction de chanes ...................................................................................................... Entres et sorties ....................................................................................................................... Lire les caractres entrs ..................................................................................................... Mise en forme de lafchage .............................................................................................. Entre et sortie de chiers ..................................................................................................

28 28 30 31 34 35 37 41 42 45 45 46 47 48 49 50 51 52 52 54 54 55 56 57 58 58 59 60 60 60 61 62 63 64 66 69 70 70 72 76

Table des matires

V

Flux dexcution ....................................................................................................................... Porte dun bloc .................................................................................................................. Instructions conditionnelles ................................................................................................ Boucles .............................................................................................................................. Boucles dtermines ........................................................................................................... Slections multiples linstruction switch .................................................................... Interrompre le ux dexcution .......................................................................................... Grands nombres ....................................................................................................................... Tableaux ................................................................................................................................... La boucle "for each" ........................................................................................................... Initialiseurs de tableaux et tableaux anonymes .................................................................. Copie des tableaux .............................................................................................................. Paramtres de ligne de commande ..................................................................................... Tri dun tableau ................................................................................................................... Tableaux multidimensionnels ............................................................................................. Tableaux irrguliers ............................................................................................................ Chapitre 4. Objets et classes ...................................................................................................... Introduction la programmation oriente objet ....................................................................... Les classes .......................................................................................................................... Les objets ............................................................................................................................ Identication des classes .......................................................................................................... Relations entre les classes ................................................................................................... Utilisation des classes existantes .............................................................................................. Objets et variables objet ..................................................................................................... La classe GregorianCalendar de la bibliothque Java ..................................................... Les mthodes daltration et les mthodes daccs ............................................................ Dnition de vos propres classes ............................................................................................. Une classe Employee .......................................................................................................... Travailler avec plusieurs chiers source ............................................................................. Analyser la classe Employee ............................................................................................. Premiers pas avec les constructeurs .................................................................................... Paramtres implicites et explicites ...................................................................................... Avantages de lencapsulation ............................................................................................. Privilges daccs fonds sur les classes ............................................................................ Mthodes prives ................................................................................................................ Champs dinstance final .................................................................................................. Champs et mthodes statiques .................................................................................................. Champs statiques ................................................................................................................ Constantes statiques ............................................................................................................ Mthodes statiques .............................................................................................................

78 78 79 82 86 90 92 94 96 97 98 99 101 102 105 108 111 112 113 113 114 115 116 117 120 121 128 128 131 132 132 134 135 137 137 138 138 138 139 140

VI

Table des matires

Mthodes "factory" ............................................................................................................. La mthode main ............................................................................................................... Paramtres des mthodes ......................................................................................................... Construction dun objet ........................................................................................................... Surcharge ............................................................................................................................ Initialisation des champs par dfaut ................................................................................... Constructeurs par dfaut ..................................................................................................... Initialisation explicite de champ ......................................................................................... Noms de paramtres ........................................................................................................... Appel dun autre constructeur ............................................................................................ Blocs dinitialisation ........................................................................................................... Destruction des objets et mthode nalize ......................................................................... Packages ................................................................................................................................... Importation des classes ....................................................................................................... Imports statiques ................................................................................................................. Ajout dune classe dans un package ................................................................................... Visibilit dans un package .................................................................................................. Le chemin de classe .................................................................................................................. Dnition du chemin de classe ........................................................................................... Commentaires pour la documentation ...................................................................................... Insertion des commentaires ................................................................................................ Commentaires de classe ...................................................................................................... Commentaires de mthode ................................................................................................. Commentaires de champ .................................................................................................... Commentaires gnraux ..................................................................................................... Commentaires de package et densemble ........................................................................... Extraction des commentaires .............................................................................................. Conseils pour la conception de classes .................................................................................... Chapitre 5. Lhritage ................................................................................................................. Classes, superclasses et sous-classes ........................................................................................ Hirarchie dhritage .......................................................................................................... Polymorphisme ................................................................................................................... Liaison dynamique ............................................................................................................. Empcher lhritage : les classes et les mthodes final .................................................. Transtypage ......................................................................................................................... Classes abstraites ................................................................................................................ Accs protg ..................................................................................................................... Object : la superclasse cosmique .............................................................................................. La mthode equals ........................................................................................................... Test dgalit et hritage .....................................................................................................

141 141 144 150 150 151 151 152 153 153 154 158 158 159 161 161 164 165 168 168 169 169 170 171 171 172 172 173 177 178 184 185 186 189 190 192 197 198 198 199

Table des matires

VII

La mthode hashCode ....................................................................................................... La mthode toString ....................................................................................................... Listes de tableaux gnriques ................................................................................................... Accder aux lments dune liste de tableaux .................................................................... Compatibilit entre les listes de tableaux brutes et types ................................................. Enveloppes dobjets et autoboxing ........................................................................................... Mthodes ayant un nombre variable de paramtres ........................................................... Classes dnumration .............................................................................................................. Rexion .................................................................................................................................. La classe Class ................................................................................................................. Introduction linterception dexceptions .......................................................................... La rexion pour analyser les caractristiques dune classe .............................................. La rexion pour lanalyse des objets lexcution .......................................................... La rexion pour crer un tableau gnrique ..................................................................... Les pointeurs de mthodes ................................................................................................. Conseils pour lutilisation de lhritage ................................................................................... Chapitre 6. Interfaces et classes internes ................................................................................ Interfaces .................................................................................................................................. Proprits des interfaces ..................................................................................................... Interfaces et classes abstraites ............................................................................................ Clonage dobjets ....................................................................................................................... Interfaces et callbacks .............................................................................................................. Classes internes ........................................................................................................................ Accder ltat dun objet laide dune classe interne .................................................... Rgles particulires de syntaxe pour les classes internes ................................................... Utilit, ncessit et scurit des classes internes ................................................................ Classes internes locales ...................................................................................................... Accs aux variables final partir de mthodes externes ................................................. Classes internes anonymes ................................................................................................. Classes internes statiques .................................................................................................... Proxies ...................................................................................................................................... Proprits des classes proxy ............................................................................................... Chapitre 7. Programmation graphique .................................................................................... Introduction Swing ................................................................................................................ Cration dun cadre .................................................................................................................. Positionnement dun cadre ....................................................................................................... Proprits des cadres .......................................................................................................... Dterminer une taille de cadre adquate ............................................................................. Afchage des informations dans un composant .......................................................................

202 204 210 212 216 217 220 221 223 224 226 227 232 237 240 244 247 248 253 254 255 261 264 265 268 269 271 272 274 276 280 284 287 288 291 294 296 296 300

VIII

Table des matires

Formes 2D ................................................................................................................................ Couleurs ................................................................................................................................... Texte et polices ......................................................................................................................... Afchage dimages .................................................................................................................. Chapitre 8. Gestion des vnements .......................................................................................... Introduction la gestion des vnements ................................................................................. Exemple : gestion dun clic de bouton ............................................................................... Etre confortable avec les classes internes ........................................................................... Crer des couteurs contenant un seul appel de mthode .................................................. Exemple : modication du "look and feel" ......................................................................... Classes adaptateurs ............................................................................................................. Actions ..................................................................................................................................... Evnements de la souris ..................................................................................................... Hirarchie des vnements AWT ............................................................................................. Evnements smantiques et de bas niveau ......................................................................... Chapitre 9. Swing et les composants dinterface utilisateur ................................................... Swing et larchitecture Modle-Vue-Contrleur ...................................................................... Modles de conception ....................................................................................................... Larchitecture Modle-Vue-Contrleur .............................................................................. Une analyse Modle-Vue-Contrleur des boutons Swing .................................................. Introduction la gestion de mise en forme .............................................................................. Gestionnaire BorderLayout ................................................................................................ Disposition des grilles ........................................................................................................ Entre de texte .......................................................................................................................... Champs de texte .................................................................................................................. Etiquettes et composants dtiquetage ................................................................................ Champs de mot de passe ..................................................................................................... Zones de texte ..................................................................................................................... Volets de dlement ............................................................................................................ Composants du choix ............................................................................................................... Cases cocher .................................................................................................................... Boutons radio ...................................................................................................................... Bordures ............................................................................................................................. Listes droulantes ............................................................................................................... Curseurs .............................................................................................................................. Menus ....................................................................................................................................... Cration dun menu ............................................................................................................ Icnes et options de menu ..................................................................................................

305 312 315 323 327 327 330 334 337 337 341 344 352 359 361 365 366 366 367 370 372 374 376 380 380 382 383 384 385 387 387 390 394 398 402 408 408 410

Table des matires

IX

Options de menu avec cases cocher et boutons radio ...................................................... Menus contextuels .............................................................................................................. Caractres mnmoniques et raccourcis clavier ................................................................... Activation et dsactivation des options de menu ................................................................ Barres doutils .................................................................................................................... Bulles daide ....................................................................................................................... Mise en forme sophistique ...................................................................................................... Gestionnaire GridBagLayout .............................................................................................. GroupLayout ....................................................................................................................... Cration sans gestionnaire de mise en forme ..................................................................... Gestionnaires de mise en forme personnaliss ................................................................... Squence de tabulation ....................................................................................................... Botes de dialogue .................................................................................................................... Botes de dialogue doptions .............................................................................................. Cration de botes de dialogue ............................................................................................ Echange de donnes ............................................................................................................ Botes de dialogue Fichier .................................................................................................. Slecteurs de couleur .......................................................................................................... Chapitre 10. Dployer des applets et des applications ............................................................. Les chiers JAR ....................................................................................................................... Le manifeste ....................................................................................................................... Fichiers JAR excutables .................................................................................................... Les ressources ..................................................................................................................... Verrouillage ........................................................................................................................ Java Web Start .......................................................................................................................... Le bac sable ..................................................................................................................... Code sign .......................................................................................................................... LAPI JNLP ....................................................................................................................... Les applets ................................................................................................................................ Un petit applet .................................................................................................................... Conversion dune application en applet .............................................................................. Balises HTML et attributs pour applets .............................................................................. La balise object ................................................................................................................... Passer des informations un applet avec des paramtres ................................................... Accder aux images et chiers audio ................................................................................. Le contexte dapplet ........................................................................................................... La communication interapplets .......................................................................................... Faire afcher des informations par le navigateur ............................................................... Cest un applet et cest aussi une application ! ...................................................................

411 412 414 416 420 422 425 427 436 445 446 450 451 452 461 466 472 483 491 492 493 494 495 498 498 502 503 505 513 514 517 518 521 521 526 528 528 528 530

X

Table des matires

Stockage des prfrences dapplications .................................................................................. Concordances de proprits ................................................................................................ LAPI Preferences .............................................................................................................. Chapitre 11. Exceptions, consignation, assertion et mise au point ......................................... Le traitement des erreurs .......................................................................................................... Le classement des exceptions ............................................................................................. Signaler les exceptions sous contrle ................................................................................. Comment lancer une exception .......................................................................................... Crer des classes dexception ............................................................................................. Capturer les exceptions ............................................................................................................ Capturer des exceptions multiples ...................................................................................... Relancer et enchaner les exceptions .................................................................................. La clause nally .................................................................................................................. Analyser les traces de piles ................................................................................................. Quelques conseils sur lutilisation des exceptions ................................................................... Les assertions ........................................................................................................................... Activation et dsactivation des assertions ........................................................................... Vrication des paramtres avec des assertions ................................................................. Utiliser des assertions pour documenter des hypothses .................................................... La consignation ........................................................................................................................ Consignation de base .......................................................................................................... Consignation avance ......................................................................................................... Modier la conguration du gestionnaire de journaux ...................................................... La localisation .................................................................................................................... Les gestionnaires ................................................................................................................ Les ltres ............................................................................................................................ Les formateurs .................................................................................................................... Une astuce de consignation ................................................................................................ Les techniques de mise au point ............................................................................................... Utiliser une fentre de console ........................................................................................... Tracer les vnements AWT ............................................................................................... Le robot AWT ..................................................................................................................... Utiliser un dbogueur ............................................................................................................... Chapitre 12. Programmation gnrique ................................................................................... Pourquoi la programmation gnrique ? .................................................................................. Y a-t-il un programmeur gnrique dans la salle ? ............................................................. Dnition dune classe gnrique simple ................................................................................. Mthodes gnriques ................................................................................................................ Limites pour variables de type .................................................................................................

535 536 540 547 548 549 551 553 554 555 557 557 558 561 564 567 568 568 569 570 571 571 574 575 576 579 579 580 587 593 595 598 602 607 608 609 610 612 613

Table des matires

XI

Code gnrique et machine virtuelle ........................................................................................ Traduire les expressions gnriques ................................................................................... Traduire les mthodes gnriques ...................................................................................... Appeler un code existant .................................................................................................... Restrictions et limites ............................................................................................................... Les paramtres de type ne peuvent pas tre instancis avec les types primitifs ................. Les informations sur le type dexcution ne fonctionnent quavec les types bruts ............ Vous ne pouvez pas lancer ou intercepter des instances dune classe gnrique ............... Les tableaux de types avec paramtres ne sont pas autoriss ............................................. Vous ne pouvez pas instancier des variables de type .......................................................... Les variables de type ne sont pas valables dans des contextes statiques des classes gnriques ........................................................................................................ Attention aux conits aprs un effacement ........................................................................ Rgles dhritage pour les types gnriques ............................................................................ Types joker ............................................................................................................................... Limites de supertypes pour les jokers ................................................................................. Jokers sans limites .............................................................................................................. Capture de caractres joker ................................................................................................. Rexion et gnrique .............................................................................................................. Utilisation des paramtres Class pour la concordance de type ................................... Informations de type gnrique dans la machine virtuelle ................................................. Chapitre 13. Collections ............................................................................................................. Les interfaces de collection ...................................................................................................... Sparer les interfaces dune collection et leur implmentation .......................................... Interfaces de collection et ditration dans la bibliothque Java ........................................ Suppression dlments ...................................................................................................... Mthodes utilitaires gnriques .......................................................................................... Les collections concrtes .......................................................................................................... Listes chanes .................................................................................................................... Listes de tableaux ............................................................................................................... Tables de hachage ............................................................................................................... Arbres ................................................................................................................................. Queues et deques ................................................................................................................ Queues de priorit ............................................................................................................... Cartes .................................................................................................................................. Classes de cartes et de set spcialises ............................................................................... La structure des collections ...................................................................................................... Les vues et les emballages .................................................................................................. Les oprations de masse ..................................................................................................... Conversion entre collections et tableaux ............................................................................

615 616 617 619 620 620 620 621 622 622 624 624 625 627 628 630 631 634 635 636 643 643 644 646 649 649 651 652 660 661 664 670 671 673 677 681 685 691 692

XII

Table des matires

Algorithmes .............................................................................................................................. Trier et mlanger ................................................................................................................. Recherche binaire ............................................................................................................... Algorithmes simples ........................................................................................................... Ecrire vos propres algorithmes ........................................................................................... Les anciennes collections ......................................................................................................... La classe Hashtable ............................................................................................................ Les numrations ................................................................................................................ Cartes de proprits ............................................................................................................ Piles .................................................................................................................................... Les ensembles de bits ......................................................................................................... Chapitre 14. Multithreads .......................................................................................................... Quest-ce quun thread ? .......................................................................................................... Utiliser des threads pour laisser une chance aux autres tches ........................................... Interrompre des threads ............................................................................................................ Les tats dun thread ........................................................................................................... Threads termins ................................................................................................................. Proprits dun thread .............................................................................................................. Priorits dun thread ........................................................................................................... Threads dmons .................................................................................................................. Gestionnaire dexceptions non rcupres ......................................................................... Synchronisation ........................................................................................................................ Exemple de condition de course ......................................................................................... Explication des conditions de course ................................................................................. Verrous dobjet ................................................................................................................... Objets de condition ............................................................................................................. Le mot cl synchronized ..................................................................................................... Blocs synchroniss ............................................................................................................. Le concept des moniteurs ................................................................................................... Champs volatiles ................................................................................................................. Verrous morts ...................................................................................................................... Test de verrous et temporisations ....................................................................................... Lire et crire des verrous .................................................................................................... Pourquoi les mthodes stop et suspend ne sont plus utilises .................................................. Queues de blocage .................................................................................................................... Collections compatibles avec les threads ................................................................................. Cartes, jeux et queues efcaces .......................................................................................... CopyOnWriteArray ........................................................................................................... Anciennes collections compatibles avec les threads .......................................................... Callable et Future .....................................................................................................................

693 694 696 698 699 700 700 701 702 702 703 707 708 713 718 721 722 724 724 725 725 727 727 731 732 735 740 743 745 745 747 750 751 752 754 760 761 762 763 764

Table des matires

XIII

Executors .................................................................................................................................. Pools de threads .................................................................................................................. Excution programme ....................................................................................................... Contrle de groupes de tches ............................................................................................ Synchronizers ........................................................................................................................... Smaphores ......................................................................................................................... Verrous Countdown ............................................................................................................ Barrires ............................................................................................................................. Exchanger ........................................................................................................................... Queues synchrones ............................................................................................................. Exemple : pause et reprise dune animation ....................................................................... Threads et Swing ................................................................................................................ Excution de tches longues ............................................................................................... Utilisation du travailleur Swing .......................................................................................... La rgle du thread unique ................................................................................................... Annexe. Les mots cls de Java ................................................................................................... Index ..............................................................................................................................................

768 769 772 773 774 775 776 776 777 777 777 783 784 788 795 797 801

IntroductionAvertissement au lecteurVers la n de 1995, le langage de programmation Java surgit sur la grande scne dInternet et obtint immdiatement un norme succs. La prtention de Java est de constituer la colle universelle capable de connecter les utilisateurs aux informations, que celles-ci proviennent de serveurs Web, de bases de donnes, de fournisseurs dinformations ou de toute autre source imaginable. Et Java se trouve en bonne position pour relever ce d. Il sagit dun langage de conception trs robuste qui a t adopt par la majorit des principaux fournisseurs, lexception de Microsoft. Ses caractristiques intgres de scurit offrent un sentiment de conance aux programmeurs comme aux utilisateurs des applications. De plus, Java intgre des fonctionnalits qui facilitent grandement certaines tches de programmation avances, comme la gestion rseaux, la connectivit bases de donnes ou le dveloppement dapplications multitches. Depuis le lancement de Java, Sun Microsystems a mis sept rvisions majeures du kit de dveloppement Java. Au cours des onze dernires annes, lAPI (interface de programmation dapplication) est passe de 200 plus de 3 000 classes. Elle traite maintenant des domaines aussi divers que la construction de linterface utilisateur, la gestion des bases de donnes, linternationalisation, la scurit et le traitement du code XML. Louvrage que vous tenez entre les mains est le premier volume de la huitime dition de Au cur de Java. Chaque dition a suivi la sortie du kit de dveloppement daussi prs que possible et, chaque fois, nous avons rcrit le livre pour y inclure les toutes dernires fonctionnalits. Cette dition a t mise jour pour traiter des nouveauts de Java Standard Edition (SE) 6. Ce livre, comme les ditions prcdentes, sadresse essentiellement aux programmeurs professionnels dsireux dutiliser Java pour dvelopper de vritables projets. Nous considrons que le lecteur possde dj une solide habitude de la programmation autre que Java et quil fuit les ouvrages qui fourmillent dexemples dpourvus dutilit pratique (comme les grille-pain, les animaux du zoo ou le "texte nerveux"). Vous nen trouverez pas ici. Notre objectif est de vous permettre dapprhender le langage et la bibliothque Java, et non de vous donner lillusion que vous les comprenez. Vous trouverez de nombreux programmes de dmonstration qui abordent la plupart des sujets traits dans cet ouvrage. Ces programmes sont volontairement simples an que le lecteur puisse se concentrer sur les points importants. Nanmoins, dans la plupart des cas, il sagit dapplications utiles qui pourront vous servir de base pour le dveloppement de vos propres projets. Nous supposons galement que vous souhaitez apprendre les caractristiques avances de Java ; cest pourquoi nous tudierons en dtail :m m m

la programmation oriente objet ; le mcanisme de rexion de Java et de proxy ; les interfaces et classes internes ;

2

Au cur de Java 2 - Notions fondamentales

m m m m m m

le modle dcouteur dvnement ; la conception dinterfaces graphiques avec la bote outils Swing ; la gestion des exceptions ; la programmation gnrique ; le cadre des collections ; la simultanit.

Enn, compte tenu de lexplosion de la bibliothque de classes de Java, nous avons d rpartir ltude de toutes les fonctionnalits sur deux volumes. Le premier, que vous avez en main, se concentre sur les concepts fondamentaux du langage Java, ainsi que sur les bases de la programmation dune interface graphique. Le second volume traite plus exhaustivement des fonctionnalits dentreprise et de la programmation avance des interfaces utilisateur. Il aborde les sujets suivants :m m m m m m m m m m m

les chiers et les ux ; les objets distribus ; les bases de donnes ; les composants GUI avancs ; les mthodes natives ; le traitement XML ; la programmation rseau ; le graphisme avanc ; linternationalisation ; JavaBeans ; les annotations.

Pour cette dition, nous avons rorganis le contenu des deux volumes. Le multithread, notamment, est trait dans le Volume I, car il est devenu trs important, la loi de Moore tant dsormais obsolte. Lors de la rdaction dun ouvrage comme celui-ci, il est invitable de commettre des erreurs et des inexactitudes. Nous avons donc prpar sur le site Web http://horstmann.com/corejava une liste de questions courantes, de corrections et dexplications. Un formulaire permettant de signaler des bogues et de suggrer des amliorations est plac stratgiquement la n de la page des corrections (pour vous encourager la lire). Ne soyez pas du si nous ne rpondons pas chaque requte ou si nous ne vous crivons pas rapidement. Nous lisons tous les e-mails et apprcions vos commentaires, qui nous permettent damliorer les futures versions de cet ouvrage.

A propos de ce livreLe Chapitre 1 prsentera les caractristiques de Java qui le distinguent des autres langages de programmation. Nous expliquerons les intentions des concepteurs du langage et nous montrerons dans quelle mesure ils sont parvenus leurs ns. Nous terminerons par un historique de Java et nous prciserons la manire dont il a volu.

Introduction

3

Le Chapitre 2 vous indiquera comment tlcharger et installer le JDK et les exemples de programme du livre. Nous vous guiderons ensuite dans la compilation et lexcution de trois programmes Java typiques : une application console, une application graphique et un applet, grce du JDK brut, un diteur de texte activ pour Java et un IDE Java. Nous entamerons au Chapitre 3 une tude approfondie du langage, en commenant par les lments de base : les variables, les boucles et les fonctions simples. Si vous tes un programmeur C ou C++, tout cela ne vous posera pas de problme, car la syntaxe employe est comparable celle de C. Si vous avez une autre formation, par exemple en Visual Basic, nous vous conseillons de lire attentivement ce chapitre. La programmation oriente objet (POO) est maintenant au cur des mthodes modernes de programmation et Java est un langage orient objet. Le Chapitre 4 prsentera lencapsulation la premire des deux notions fondamentales de lorientation objet et le mcanisme du langage Java qui permet de limplmenter, cest--dire les classes et les mthodes. En plus des rgles de Java, nous vous proposerons des conseils pour une bonne conception oriente objet. Nous aborderons ensuite le merveilleux outil javadoc qui permet de transformer les commentaires de votre code en une documentation au format HTML. Si vous tes un habitu du C++, vous pourrez vous contenter de parcourir rapidement ce chapitre. Les programmeurs qui ne sont pas familiariss avec la programmation oriente objet doivent se donner le temps dtudier ces concepts avant de poursuivre leur exploration de Java. Les classes et lencapsulation ne constituent quune partie du concept de POO et le Chapitre 5 introduira lautre lment essentiel : lhritage. Celui-ci permet de rcuprer une classe existante et de la modier selon vos besoins. Il sagit l dune technique fondamentale de la programmation Java. Le mcanisme dhritage de Java est comparable celui de C++. Ici encore, les programmeurs C++ pourront se concentrer uniquement sur les diffrences entre les deux langages. Le Chapitre 6 vous montrera comment utiliser la notion dinterface. Les interfaces permettent de dpasser le modle dhritage simple vu au Chapitre 5. En matrisant les interfaces, vous pourrez proter pleinement de lapproche oriente objet de la programmation Java. Nous traiterons galement dans ce chapitre une caractristique technique trs utile de Java, appele classe interne. Les classes internes permettent dobtenir des programmes plus propres et plus concis. Au Chapitre 7, nous commencerons vritablement la programmation dapplications. Tout programmeur en Java doit connatre un minimum de programmation de GUI, des bases que vous trouverez dans ce volume. Nous vous montrerons comment crer des fentres, y dessiner et y tracer des gures gomtriques, formater du texte avec diffrentes polices et afcher des images. Le Chapitre 8 sera consacr une tude dtaille du modle dvnement AWT, la bote outils de fentre abstraite. Nous verrons comment crire le code permettant de rpondre des vnements tels que des clics de la souris ou des frappes de touches. Vous verrez par la mme occasion comment grer des lments de linterface utilisateur graphique comme les boutons ou les panneaux. Le Chapitre 9 examinera de manire approfondie loutil Swing, qui permet de crer des interfaces graphiques multi-plates-formes. Vous apprendrez tout ce quil faut savoir sur les diffrents types de boutons, les composants de saisie, les bordures, les barres de dlement, les zones de listes, les menus et les botes de dialogue. Certains de ces composants, plus avancs, seront tudis dans le Volume II. Le Chapitre 10 indique comment dployer des programmes, sous forme dapplications ou dapplets. Nous expliquons comment emballer des programmes dans les chiers JAR et livrer des applications

4

Au cur de Java 2 - Notions fondamentales

sur Internet avec Java Web Start et les mcanismes dapplet. Enn, nous verrons la manire dont les programmes Java peuvent stocker et rcuprer des informations de conguration lorsquils ont t dploys. Le Chapitre 11 traitera de la gestion des exceptions, un mcanisme robuste qui sappuie sur le fait que mme les bons programmes peuvent subir des dommages. Les exceptions fournissent un moyen efcace de sparer le code normal de traitement et la gestion derreurs. Bien entendu, mme si vous avez scuris votre programme en grant toutes les conditions exceptionnelles, il nest pas certain quil fonctionne parfaitement. La seconde partie de ce chapitre vous donnera quelques astuces de dbogage. Pour terminer, nous vous accompagnerons dans une session de dbogage. Le Chapitre 12 donne une vue densemble de la programmation gnrique, une avance majeure de Java SE 5.0. Elle facilite la lecture de vos programmes, tout en les scurisant. Nous vous montrerons comment utiliser des types forts et comment traiter les complexits lies aux transtypages peu srs, mais aussi comment grer les complexits naissant du besoin de compatibilit avec les anciennes versions de Java. Le Chapitre 13 traitera des cadres de collections de la plate-forme Java. Lorsque vous souhaiterez collecter plusieurs objets pour les rcuprer plus tard, vous utiliserez une collection adapte votre situation, au lieu de simplement faire entrer les lments dans un tableau. Ce chapitre indique comment proter des collections standard dj cres pour vous. Le Chapitre 14 clturera ce livre avec une discussion sur le multithreading, qui permet de programmer des tches raliser en parallle (un thread est un ux de contrle dans un programme). Nous vous indiquerons comment congurer les threads et en grer la synchronisation. Le multithreading a beaucoup volu dans Java SE 5.0 et nous vous en montrerons les nouveaux mcanismes. LAnnexe est consacre aux mots cls du langage Java.

ConventionsComme cest lusage dans la plupart des ouvrages dinformatique, nous employons la police Courier pour le code des programmes.INFO ASTUCELes infos et les astuces sont repres par une de ces deux icnes.

ATTENTIONUne icne "Attention" vous prvient sil y a du danger lhorizon.

INFO C++De nombreuses notes dinfo C++ prcisent les diffrences entre Java et C++. Vous pouvez ignorer ces notes si vous ntes pas familiaris avec ce langage.

Introduction

5

API Java

Java est accompagn dune importante bibliothque de programmation (API, Application Programming Interface). Lorsque nous utilisons pour la premire fois un appel lAPI, nous proposons galement une brve description dans une note "API" situe la n de la section. Ces descriptions sont un peu plus informelles que celles de la documentation ofcielle en ligne, mais nous esprons quelles sont plus instructives. Les programmes dont le code source se trouve sur le Web sont fournis sous forme de listings, comme ceci :Listing 2.4 : WelcomeApplet.java

Exemples de codeVous trouverez sur le site des ditions Pearson Education (www.pearsoneducation.fr) tous les exemples du livre, sous forme compresse. Ils peuvent tre dcompresss avec un des outils courants du march ou avec lutilitaire jar du kit JDK. Reportez-vous au Chapitre 2 pour en savoir plus sur linstallation du JDK et des listings dexemple.

1Une introduction JavaAu sommaire de ce chapitre

Java, plate-forme de programmation Les termes cls du livre blanc de Java Les applets Java et Internet Bref historique de Java Les ides fausses les plus rpandues concernant JavaLa premire version de Java, sortie en 1996, a fait natre beaucoup de passions, pas seulement au niveau de la presse informatique, mais galement dans la presse plus gnraliste comme The New York Times, The Washington Post et Business Week. Java prsente lavantage dtre le premier et le seul langage de programmation dont lhistoire est conte la radio. Il est plutt amusant de revisiter cette poque pionnire, nous vous prsenterons donc un bref historique de Java dans ce chapitre.

Java, plate-forme de programmationDans la premire dition de cet ouvrage, nous avons d crire ceci : "La rputation de Java en tant que langage informatique est exagre : Java est assurment un bon langage de programmation. Il sagit, sans aucun doute, de lun des meilleurs disponibles pour un programmeur srieux. Java aurait, potentiellement, pu tre un grand langage de programmation, mais il est probablement trop tard pour cela. Lorsquun langage commence tre exploit, se pose le problme de la compatibilit avec le code existant." Un haut responsable de Sun Microsystems, que nous ne nommerons pas, a adress notre diteur de nombreux commentaires sur ce paragraphe. Mais, avec le temps, notre pronostic semble savrer. Java prsente de trs bonnes fonctionnalits (nous les verrons en dtail plus loin dans ce chapitre). Il a pourtant sa part dinconvnients, et les derniers ajouts ne sont pas aussi agrables que les premiers, et ce pour des raisons de compatibilit. Toutefois, comme nous le disions dans la premire dition, Java na jamais t quun langage. Mme sil en existe foison, peu font beaucoup dclats. Java est une plate-forme complte, disposant

8

Au cur de Java 2 - Notions fondamentales

dune importante bibliothque, dune grande quantit de code rutilisable et dun environnement dexcution qui propose des services tels que la scurit, la portabilit sur les systmes dexploitation et le ramasse-miettes automatique. En tant que programmeur, vous voulez un langage la syntaxe agrable et la smantique comprhensible (donc, pas de C++). Java rpond ces critres, comme des dizaines dautres langages. Certains vous proposent la portabilit, le ramasse-miettes et des outils du mme genre, mais ils ne disposent pas de vraie bibliothque, ce qui vous oblige dployer la vtre si vous souhaitez utiliser de beaux graphiques, le rseau ou laccs aux bases de donnes. Java regroupe tout cela : un langage de qualit, un environnement dexcution idoine et une grande bibliothque. Cest cette combinaison qui fait de Java une proposition laquelle de nombreux programmeurs ne rsistent pas.

Les termes cls du livre blanc de JavaLes auteurs de Java ont crit un important livre blanc qui prsente les objectifs et les ralisations de leur conception. Ce livre sarticule autour des onze termes cls suivants :Simplicit Orient objet Compatible avec les rseaux Fiabilit Scurit Architecture neutre Portabilit Interprt Performances leves Multithread Dynamique

Dans la suite de ce chapitre, nous allons :m

rsumer, par lintermdiaire dextraits du livre blanc, ce que les concepteurs de Java ont voulu traduire avec chacun de ces termes cls ; exprimer ce que nous pensons de chaque terme, partir de notre exprience de la version actuelle de Java.INFO

m

A lheure o nous crivons ces lignes, le livre blanc est disponible ladresse suivante : http://java.sun.com/docs/ white/langenv/. Le rsum des onze mots cls gure ladresse http://java.sun.com/docs/overviews/java/javaoverview-1.html.

Simplicit*

Nous avons voulu crer un systme qui puisse tre programm simplement, sans ncessiter un apprentissage sotrique, et qui tire parti de lexprience standard actuelle. En consquence, mme si nous pensions que C++ ne convenait pas, Java a t conu de faon relativement proche de ce langage dans le dessein de faciliter la comprhension du systme. De nombreuses fonctions compliques, mal comprises, rarement utilises, de C++, qui nous semblaient par exprience apporter plus dinconvnients que davantages, ont t supprimes de Java.

Chapitre 1

Une introduction Java

9

La syntaxe de Java reprsente rellement une version amliore de C++. Les chiers den-tte, larithmtique des pointeurs (ou mme une syntaxe de pointeur), les structures, les unions, la surcharge doprateur, les classes de base virtuelles, etc., ne sont plus ncessaires (tout au long de cet ouvrage, nous avons inclus des notes Info C++ dcrivant plus prcisment les diffrences entre Java et C++). Les concepteurs nont cependant pas tent de modier certaines fonctions piges de C++ telles que linstruction switch. Si vous connaissez C++, le passage la syntaxe de Java vous semblera facile. Si vous tes habitu un environnement de programmation visuel (tel que Visual Basic), le langage Java vous paratra plus complexe. Une partie de la syntaxe vous semblera trange (mme si sa matrise est rapide). Plus important encore, la programmation en Java ncessitera davantage de travail. Lintrt de Visual Basic rside dans le fait que son environnement visuel de conception fournit de faon presque automatique une grande partie de linfrastructure dune application. En Java, la fonctionnalit quivalente doit tre programme manuellement, gnralement laide dune quantit respectable de code. Il existe cependant des environnements de dveloppement tiers qui permettent lcriture de programmes laide doprations "glisser-dplacer".*

Un autre avantage de sa simplicit est sa petite taille. Lun des buts de Java est de permettre des logiciels de sexcuter intgralement sur de modestes machines. Ainsi, la taille cumule de linterprteur de base et du support des classes est denviron 40 Ko ; pour supporter les classes standard ainsi que la gestion multitraitement (threads), il faut ajouter 175 Ko.

Cest un exploit. Toutefois, sachez que la taille de la bibliothque a atteint des proportions considrables. Il existe maintenant une Java Micro Edition spare, avec une bibliothque plus petite, convenant aux priphriques intgrs.

Orient objet*

Pour rester simples, disons que la conception oriente objet est une technique de programmation qui se concentre sur les donnes (les objets) et sur les interfaces avec ces objets. Pour faire une analogie avec la menuiserie, on pourrait dire quun menuisier "orient objet" sintresse essentiellement la chaise (lobjet) quil fabrique et ensuite aux outils utiliss pour la fabriquer. Par opposition, le menuisier "non orient objet" penserait dabord ses outils. Les facilits orientes objet de Java sont essentiellement celles de C++...

Au cours des trente dernires annes, la programmation oriente objet a prouv ses avantages, et il est inconcevable quun langage de programmation moderne nen tire pas parti. En fait, les fonctionnalits orientes objet de Java sont comparables celles de C++. Les diffrences majeures rsident dans lhritage multiple (que Java a remplac par le concept plus simple des interfaces) et le modle objet de Java (mtaclasses), que nous verrons au Chapitre 5.INFOSi vous navez aucune exprience des langages de programmation oriente objet, prenez soin de lire attentivement les Chapitres 4 6. Ils vous expliquent ce quest la programmation oriente objet et pour quelles raisons elle est plus utile la programmation de projets sophistiqus que ne le sont les langages procduraux comme C ou Basic.

10

Au cur de Java 2 - Notions fondamentales

Compatible avec les rseaux*

Java possde une importante bibliothque de routines permettant de grer les protocoles TCP/IP tels que HTTP et FTP. Les applications Java peuvent charger des objets sur Internet et y accder via des URL avec la mme facilit quelles accdent un chier local sur le systme.

Nous avons trouv que les fonctionnalits rseau de Java taient la fois ables et dutilisation aise. Toute personne ayant essay de faire de la programmation pour Internet avec un autre langage se rjouira de la simplicit de Java lorsquil sagit de mettre en uvre des tches lourdes, comme louverture dune connexion avec une socket (nous verrons les rseaux dans le Volume II de cet ouvrage). Le mcanisme dinvocation de mthode distance (RMI) autorise la communication entre objets distribus (voir galement le Volume II).

Fiabilit*

Java a t conu pour que les programmes qui lutilisent soient ables sous diffrents aspects. Sa conception encourage le programmeur traquer prventivement les ventuels problmes, lancer des vrications dynamiques en cours dexcution et liminer les situations gnratrices derreurs... La seule et unique grosse diffrence entre C/C++ et Java rside dans le fait que ce dernier intgre un modle de pointeur qui carte les risques dcrasement de la mmoire et dendommagement des donnes.

Voil encore une caractristique fort utile. Le compilateur Java dtecte de nombreux problmes qui, dans dautres langages, ne sont visibles quau moment de lexcution. Tous les programmeurs qui ont pass des heures rcuprer une mmoire corrompue par un bogue de pointeur seront trs heureux dexploiter cette caractristique de Java. Si vous connaissez dj des langages comme Visual Basic, qui nexploitent pas les pointeurs de faon explicite, vous vous demandez srement pourquoi ce problme est si important. Les programmeurs en C nont pas cette chance. Ils ont besoin des pointeurs pour accder des chanes, des tableaux, des objets et mme des chiers. Dans Visual Basic, vous nemployez de pointeur pour aucune de ces entits, pas plus que vous navez besoin de vous soucier de leurs allocations en mmoire. En revanche, certaines structures de donnes sont difciles implmenter sans laide de pointeurs. Java vous donne le meilleur des deux mondes. Vous navez pas besoin des pointeurs pour les constructions habituelles, comme les chanes et les tableaux. Vous disposez de la puissance des pointeurs en cas de ncessit, par exemple, pour construire des listes chanes. Et cela en toute scurit dans la mesure o vous ne pouvez jamais accder un mauvais pointeur ni faire des erreurs dallocation de mmoire, pas plus quil nest ncessaire de vous protger des "fuites" de mmoire.

Scurit*

Java a t conu pour tre exploit dans des environnements serveur et distribus. Dans ce but, la scurit na pas t nglige. Java permet la construction de systmes inaltrables et sans virus.

Dans la premire dition, nous dclarions : "Il ne faut jamais dire fontaine je ne boirai plus de ton eau." Et nous avions raison. Peu aprs la publication de la premire version du JDK, un groupe dexperts de la scurit de luniversit de Princeton a localis les premiers bogues des caractristiques de scurit de Java 1.0. Sun Microsystems a encourag la recherche sur la scurit de Java, en

Chapitre 1

Une introduction Java

11

rendant publiques les caractristiques et limplmentation de la machine virtuelle et des bibliothques de scurit. Il a rpar rapidement tous les bogues connus. Quoi quil en soit, Java se charge de rendre particulirement difcile le contournement des mcanismes de scurit. Jusqu prsent, les bogues qui ont t localiss taient trs subtils et relativement peu nombreux. Ds le dpart, Java a t conu pour rendre impossibles certains types dattaques et, parmi eux :m m m

la surcharge de la pile dexcution, une attaque commune des vers et des virus ; lendommagement de la mmoire situe lextrieur de son propre espace de traitement ; la lecture ou lcriture des chiers sans autorisation.

Avec le temps, un certain nombre de fonctionnalits relatives la scurit ont t ajoutes Java. Depuis la version 1.1, Java intgre la notion de classe signe numriquement (voir Au cur de Java 2 Volume II, ditions CampusPress), qui vous permet de savoir qui la crite. Votre degr de conance envers son auteur va dterminer lampleur des privilges que vous allez accorder la classe sur votre machine.INFOLe mcanisme concurrent de mise disposition de code, labor par Microsoft et fond sur sa technologie ActiveX, emploie exclusivement les signatures numriques pour assurer la scurit. Bien videmment, cela nest pas sufsant. Tous les utilisateurs des produits Microsoft peuvent conrmer que les programmes proposs par des concepteurs bien connus rencontrent des dfaillances qui provoquent des dgts. Le modle de scurit de Java est nettement plus puissant que celui dActiveX dans la mesure o il contrle lapplication en cours dexcution et lempche de faire des ravages.

Architecture neutre*

Le compilateur gnre un format de chier objet dont larchitecture est neutre le code compil est excutable sur de nombreux processeurs, partir du moment o le systme dexcution de Java est prsent. Pour ce faire, le compilateur Java gnre des instructions en bytecode (ou pseudo-code) qui nont de lien avec aucune architecture dordinateur particulire. Au contraire, ces instructions ont t conues pour tre la fois faciles interprter, quelle que soit la machine, et faciles traduire la vole en code machine natif.

Lide nest pas nouvelle. Il y a plus de trente ans, la mise en uvre originale de Pascal par Niklaus Wirth et le systme Pascal UCSD utilisaient tous deux la mme approche. Bien entendu, linterprtation des bytecodes est forcment plus lente que lexcution des instructions machine pleine vitesse. On peut donc douter de la pertinence de cette ide. Toutefois, les machines virtuelles ont le choix de traduire les squences de bytecode frquemment utilises en code machine, une procdure appele compilation en "juste--temps" (just-in-time ou JIT). Cette stratgie sest rvle tellement efcace que la plate-forme .NET de Microsoft va jusqu reposer sur une machine virtuelle. La machine virtuelle prsente dautres avantages. Elle accrot la scurit car elle est en mesure de vrier le comportement des suites dinstructions. Certains programmes vont jusqu produire des bytecodes la vole, en amliorant dynamiquement les capacits dun programme en cours dexcution.

12

Au cur de Java 2 - Notions fondamentales

Portabilit*

A la diffrence de C et de C++, on ne trouve pas les aspects de dpendance de la mise en uvre dans la spcication. Les tailles des types de donnes primaires sont spcies, ainsi que le comportement arithmtique qui leur est applicable.

Par exemple, en Java, un int est toujours un entier en 32 bits. Dans C/C++, int peut reprsenter un entier 16 bits, un entier 32 bits ou toute autre taille dcide par le concepteur du compilateur. La seule restriction est que le type int doit contenir au moins autant doctets quun shortint et ne peut pas en contenir plus quun longint. Le principe dune taille xe pour les types numriques limine les principaux soucis du portage dapplications. Les donnes binaires sont stockes et transmises dans un format xe, ce qui met n la confusion sur lordre des octets. Les chanes sont enregistres au format Unicode standard.*

Les bibliothques intgres au systme dnissent des interfaces portables. Par exemple, il existe une classe Window abstraite, accompagne de ses mises en uvre pour UNIX, Windows et Macintosh.

Tous ceux qui ont essay savent que llaboration dun programme compatible avec Windows, Macintosh et dix versions dUNIX, reprsente un effort hroque. Java 1.0 a accompli cet effort en proposant un kit doutils simples sachant "coller" aux principaux composants dinterface utilisateur dun grand nombre de plates-formes. Malheureusement, le rsultat tait une bibliothque qui donnait, avec beaucoup de travail, des programmes peine acceptables sur diffrents systmes. En outre, on rencontrait souvent des bogues diffrents sur les diffrentes implmentations graphiques. Mais ce ntait quun dbut. Il existe de nombreuses applications pour lesquelles la portabilit est plus importante que lefcacit de linterface utilisateur, et ce sont celles qui ont bnci des premires versions de Java. Aujourdhui, le kit doutils de linterface utilisateur a t entirement rcrit de manire ne plus dpendre de linterface utilisateur de lhte. Le rsultat est nettement plus cohrent et nous pensons quil est beaucoup plus intressant que dans les prcdentes versions de Java.

Interprt*

Linterprteur de Java peut excuter les bytecodes directement sur nimporte quelle machine sur laquelle il a t port. Dans la mesure o la liaison est un processus plus incrmentiel et lger, le processus de dveloppement peut se rvler plus rapide et exploratoire.

La liaison incrmentielle prsente des avantages, mais ils ont t largement exagrs. Quoi quil en soit, nous avons trouv les outils de dveloppement relativement lents. Aujourdhui, les bytecodes sont traduits en code machine par le compilateur en juste--temps.

Performances leves*

En rgle gnrale, les performances des bytecodes interprts sont tout fait sufsantes ; il existe toutefois des situations dans lesquelles des performances plus leves sont ncessaires. Les bytecodes peuvent tre traduits la vole (en cours dexcution) en code machine pour lunit centrale destine accueillir lapplication.

Aux premiers temps de Java, de nombreux utilisateurs rejetaient la formule "performances leves". Il existe toutefois aujourdhui des compilateurs JIT (just-in-time, juste--temps) dune qualit telle

Chapitre 1

Une introduction Java

13

quils concurrencent les compilateurs traditionnels et, dans certains cas, les dpassent du fait quils disposent de davantage dinformations. Par exemple, un compilateur JIT est capable didentier du code souvent excut et doptimiser exclusivement la vitesse de celui-ci. Une optimisation plus pousse consiste liminer les appels de fonctions. Le compilateur en juste--temps connat les classes qui ont t charges. Il peut utiliser la suppression lorsque, en fonction de la collection de classes actuellement charge, une fonction particulire nest jamais crase. Il peut ensuite annuler cette optimisation si ncessaire.

Multithread*

Les avantages du multithread sont une meilleure interractivit et un meilleur comportement en temps rel.

Si vous avez dj essay de programmer le multithread dans un autre langage, vous allez tre agrablement surpris de la simplicit de cette tche dans Java. Avec lui, les threads sont galement capables de tirer parti des systmes multiprocesseurs. Le ct ngatif rside dans le fait que les implmentations de threads sur les plates-formes principales sont trs diffrentes, et Java ne fait aucun effort pour tre indpendant de la plate-forme cet gard. La seule partie de code identique entre les diffrentes machines est celle de lappel du multithread. Java se dcharge de limplmentation du multithread sur le systme dexploitation sous-jacent ou sur une bibliothque de threads. Malgr tout, la simplicit du multithread est lune des raisons principales du succs de Java pour le dveloppement ct serveur.

Java, langage dynamique*

Sur plusieurs points, Java est un langage plus dynamique que C ou C++. Il a t conu pour sadapter un environnement en volution constante. Les bibliothques peuvent ajouter librement de nouvelles mthodes et variables sans pour autant affecter leurs clients. La recherche des informations de type excution dans Java est simple.

Cette fonction est importante lorsque lon doit ajouter du code un programme en cours dexcution. Le premier exemple est celui du code tlcharg depuis Internet pour sexcuter dans un navigateur. Avec la version 1.0 de Java, la recherche dinformations de type excution tait relativement complexe. A lheure actuelle, les versions courantes de Java procurent au programmeur un aperu complet de la structure et du comportement de ses objets. Cela se rvle trs utile pour les systmes ncessitant une analyse des objets au cours de lexcution, tels que les gnrateurs graphiques de Java, les dbogueurs volus, les composants enchables et les bases de donnes objet.INFOPeu aprs les premiers succs de Java, Microsoft a sorti un produit intitul J++ qui prsente un lien de parent avec Java. Pour lheure, Microsoft ne prend plus en charge J++ mais a introduit un nouveau langage, appel C#, qui prsente aussi de nombreuses similarits avec Java mais utilise une autre machine virtuelle. Il existe mme un J# pour faire migrer les applications J++ vers la machine virtuelle utilise par C#. Sachez que nous ne reviendrons pas sur J++, C# ou J# dans cet ouvrage.

14

Au cur de Java 2 - Notions fondamentales

Les applets Java et InternetLide de base est simple : les utilisateurs tlchargent les bytecodes Java depuis Internet et les excutent sur leurs propres machines. Les programmes Java sexcutant sur les pages Web sont nomms applets. Pour utiliser un applet, vous devez disposer dun navigateur Web compatible Java, qui excutera les bytecodes. Vous naurez besoin dinstaller aucun logiciel. Sun fournit sous licence le code source de Java et afrme quaucun changement naffectera le langage et la structure de la bibliothque de base. Vous obtiendrez la dernire version du programme ds que vous visiterez la page Web contenant lapplet. Et surtout, grce la scurit de la machine virtuelle, vous naurez plus vous inquiter des attaques provenant dun code hostile. Lorsque lutilisateur tlcharge un applet, il sagit presque de lintgration dune image dans une page Web. Lapplet sinsre dans la page et le texte se rpartit dans son espace. Le fait est que limage est vivante. Elle ragit aux commandes utilisateur, change dapparence et transfre les donnes entre lordinateur qui prsente lapplet et lordinateur qui la sert. La Figure 1.1 prsente un exemple intressant de page Web dynamique, un applet qui permet dafcher des molcules et ralise des calculs sophistiqus. A laide de la souris, vous pouvez faire pivoter chaque molcule et zoomer dessus, pour mieux en comprendre la structure. Ce type de manipulation directe est impossible avec des pages Web statiques, elle nest possible quavec les applets (vous trouverez cet applet ladresse http://jmol.sourceforge.net). A leur apparition, les applets ont suscit une grande excitation. Beaucoup pensent que lattirance pour les applets a t responsable de la formidable popularit de Java. Or, cette premire excitation sest rapidement transforme en frustration. Diffrentes versions de Netscape et dInternet Explorer excutaient des versions diffrentes de Java, certaines particulirement obsoltes. Cette situation malheureuse a compliqu de plus en plus le dveloppement dapplets capables de tirer parti de la version la plus actuelle de Java. Aujourdhui, la plupart des pages Web utilisent simplement JavaScript ou Flash pour obtenir des effets dynamiques dans le navigateur. Java, quant lui, est devenu le langage le plus populaire pour dvelopper des applications ct serveur qui produisent des pages Web et ralisent la logique en arrire-plan.Figure 1.1Lapplet Jmol.

Chapitre 1

Une introduction Java

15

Bref historique de JavaCette section prsente un bref historique de lvolution de Java. Elle se rfre diverses sources publies (et, plus important encore, un entretien avec les crateurs de Java paru dans le magazine en ligne SunWorld de juillet 1995). La naissance de Java date de 1991, lorsquun groupe dingnieurs de Sun, dirig par Patrick Naughton et James Gosling, voulut concevoir un petit langage informatique adapt des appareils de consommation comme les dcodeurs du cble TV. Ces appareils ne disposant que de trs peu de puissance ou de mmoire, le langage devait tre concis et gnrer un code trs strict. Des constructeurs diffrents tant susceptibles de choisir des units centrales diffrentes, il tait galement important que le langage ne soit pas li une seule architecture. Le nom de code du projet tait "Green". Les exigences dun code concis