835

Au coeur de Java 6 (volume 1 Notions fondamentales) - 8ème Edition.pdf

  • Upload
    souf13

  • View
    105

  • Download
    8

Embed Size (px)

Citation preview

  • 8e dition

    Cay S. Horstmannet Gary Cornell

    Au cur de Java

    volume 1Notions fondamentales

    Livre Java.book Page I Mercredi, 13. fvrier 2008 2:34 14

  • Le prsent ouvrage est la traduction de Core Java, vol. I Fundamentals, 8e d., de Cay Hortsmann etGary Cornell, publi par Pearson Education Inc./Prentice Hall, Copyright 2008 Sun MicrosystemInc.

    Authorized translation from the English language edition, entitled CORE JAVA, VOL. I FUNDA-MENTALS, 8th Edition By CAY HORTSMANN and GARY CORNELL, published by PearsonEducation Inc., publishing as Prentice Hall, Copyright 2008 Sun Microsystem Inc., 4150Network Circle, Santa Clara, California 95054 USA. All rights reserved. No part of this bookmay be reproduced or transmitted in any form or by any means, electronic or mechanical, includingphotocopying, recording or by any information storage retrieval system, without permission fromPearson Education, Inc. French language edition published by PEARSON EDUCATION FRANCE,Copyright 2008

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

    Publi par Pearson Education France47 bis, rue des Vinaigriers75010 PARISTl. : 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-4Copyright 2008 Sun Microsystems, Inc.Tous droits rservs

    Sun Microsystems Inc.901 San Antonio Road, Palo Alto, California 94303 USA

    Livre Java.book Page II Mercredi, 13. fvrier 2008 2:34 14

    Copyright 2009 Pearson Education FranceISBN : 978-2-7440-4080-1

  • Table des matires

    Introduction .................................................................................................................................. 1Avertissement au lecteur .......................................................................................................... 1A propos de ce livre ................................................................................................................. 2Conventions .............................................................................................................................. 4Exemples de code ..................................................................................................................... 5

    Chapitre 1. Une introduction Java ......................................................................................... 7Java, plate-forme de programmation ........................................................................................ 7Les termes cls du livre blanc de Java ...................................................................................... 8

    Simplicit ............................................................................................................................ 8Orient objet ....................................................................................................................... 9Compatible avec les rseaux ............................................................................................... 10Fiabilit ............................................................................................................................... 10Scurit ............................................................................................................................... 10Architecture neutre ............................................................................................................. 11Portabilit ........................................................................................................................... 12Interprt ............................................................................................................................. 12Performances leves .......................................................................................................... 12Multithread ......................................................................................................................... 13Java, langage dynamique .................................................................................................... 13

    Les applets Java et Internet ...................................................................................................... 14Bref historique de Java ............................................................................................................. 15Les ides fausses les plus rpandues concernant Java .............................................................. 17

    Chapitre 2. Lenvironnement de programmation de Java ...................................................... 21Installation du kit de dveloppement Java ................................................................................ 21

    Tlcharger le JDK ............................................................................................................. 22Configurer le chemin dexcution ...................................................................................... 24Installer la bibliothque et la documentation ...................................................................... 26Installer les exemples de programmes ................................................................................ 26Explorer les rpertoires de Java .......................................................................................... 27

    Livre Java.book Page III Mercredi, 13. fvrier 2008 2:34 14

  • IV Table des matires

    Choix de lenvironnement de dveloppement .......................................................................... 28Utilisation des outils de ligne de commande ............................................................................ 28

    Conseils pour la recherche derreurs .................................................................................. 30Utilisation dun environnement de dveloppement intgr ...................................................... 31

    Localiser les erreurs de compilation ................................................................................... 34Excution dune application graphique .................................................................................... 35Elaboration et excution dapplets ........................................................................................... 37

    Chapitre 3. Structures fondamentales de la programmation Java ......................................... 41Un exemple simple de programme Java ................................................................................... 42Commentaires .......................................................................................................................... 45Types de donnes ..................................................................................................................... 45

    Entiers ................................................................................................................................. 46Types virgule flottante ...................................................................................................... 47Le type char ...................................................................................................................... 48Type boolen ....................................................................................................................... 49

    Variables ................................................................................................................................... 50 Initialisation des variables ....................................................................................................... 51

    Constantes ........................................................................................................................... 52Oprateurs ................................................................................................................................ 52

    Oprateurs dincrmentation et de dcrmentation ............................................................ 54Oprateurs relationnels et boolens .................................................................................... 54Oprateurs binaires ............................................................................................................. 55Fonctions mathmatiques et constantes .............................................................................. 56Conversions de types numriques ...................................................................................... 57Transtypages ....................................................................................................................... 58Parenthses et hirarchie des oprateurs ............................................................................ 58Types numrs .................................................................................................................. 59

    Chanes ..................................................................................................................................... 60Sous-chanes ....................................................................................................................... 60Concatnation ..................................................................................................................... 60Les chanes sont inaltrables .............................................................................................. 61Test dgalit des chanes ................................................................................................... 62Points de code et units de code ......................................................................................... 63LAPI String .................................................................................................................... 64Lire la documentation API en ligne .................................................................................... 66Construction de chanes ...................................................................................................... 69

    Entres et sorties ....................................................................................................................... 70Lire les caractres entrs ..................................................................................................... 70Mise en forme de laffichage .............................................................................................. 72Entre et sortie de fichiers .................................................................................................. 76

    Livre Java.book Page IV Mercredi, 13. fvrier 2008 2:34 14

  • Table des matires V

    Flux dexcution ....................................................................................................................... 78Porte dun bloc .................................................................................................................. 78Instructions conditionnelles ................................................................................................ 79Boucles .............................................................................................................................. 82Boucles dtermines ........................................................................................................... 86Slections multiples linstruction switch .................................................................... 90Interrompre le flux dexcution .......................................................................................... 92

    Grands nombres ....................................................................................................................... 94Tableaux ................................................................................................................................... 96

    La boucle "for each" ........................................................................................................... 97Initialiseurs de tableaux et tableaux anonymes .................................................................. 98Copie des tableaux .............................................................................................................. 99Paramtres de ligne de commande ..................................................................................... 101Tri dun tableau ................................................................................................................... 102Tableaux multidimensionnels ............................................................................................. 105Tableaux irrguliers ............................................................................................................ 108

    Chapitre 4. Objets et classes ...................................................................................................... 111Introduction la programmation oriente objet ....................................................................... 112

    Les classes .......................................................................................................................... 113Les objets ............................................................................................................................ 113

    Identification des classes .......................................................................................................... 114Relations entre les classes ................................................................................................... 115

    Utilisation des classes existantes .............................................................................................. 116Objets et variables objet ..................................................................................................... 117La classe GregorianCalendar de la bibliothque Java ..................................................... 120Les mthodes daltration et les mthodes daccs ............................................................ 121

    Dfinition de vos propres classes ............................................................................................. 128Une classe Employee .......................................................................................................... 128Travailler avec plusieurs fichiers source ............................................................................. 131Analyser la classe Employee ............................................................................................. 132Premiers pas avec les constructeurs .................................................................................... 132Paramtres implicites et explicites ...................................................................................... 134Avantages de lencapsulation ............................................................................................. 135Privilges daccs fonds sur les classes ............................................................................ 137Mthodes prives ................................................................................................................ 137Champs dinstance final .................................................................................................. 138

    Champs et mthodes statiques .................................................................................................. 138Champs statiques ................................................................................................................ 138Constantes statiques ............................................................................................................ 139Mthodes statiques ............................................................................................................. 140

    Livre Java.book Page V Mercredi, 13. fvrier 2008 2:34 14

  • VI Table des matires

    Mthodes "factory" ............................................................................................................. 141La mthode main ............................................................................................................... 141

    Paramtres des mthodes ......................................................................................................... 144Construction dun objet ........................................................................................................... 150

    Surcharge ............................................................................................................................ 150Initialisation des champs par dfaut ................................................................................... 151Constructeurs par dfaut ..................................................................................................... 151Initialisation explicite de champ ......................................................................................... 152Noms de paramtres ........................................................................................................... 153Appel dun autre constructeur ............................................................................................ 153Blocs dinitialisation ........................................................................................................... 154Destruction des objets et mthode finalize ......................................................................... 158

    Packages ................................................................................................................................... 158Importation des classes ....................................................................................................... 159Imports statiques ................................................................................................................. 161Ajout dune classe dans un package ................................................................................... 161Visibilit dans un package .................................................................................................. 164

    Le chemin de classe .................................................................................................................. 165Dfinition du chemin de classe ........................................................................................... 168

    Commentaires pour la documentation ...................................................................................... 168Insertion des commentaires ................................................................................................ 169Commentaires de classe ...................................................................................................... 169Commentaires de mthode ................................................................................................. 170Commentaires de champ .................................................................................................... 171Commentaires gnraux ..................................................................................................... 171Commentaires de package et densemble ........................................................................... 172Extraction des commentaires .............................................................................................. 172

    Conseils pour la conception de classes .................................................................................... 173

    Chapitre 5. Lhritage ................................................................................................................. 177Classes, superclasses et sous-classes ........................................................................................ 178

    Hirarchie dhritage .......................................................................................................... 184Polymorphisme ................................................................................................................... 185Liaison dynamique ............................................................................................................. 186Empcher lhritage : les classes et les mthodes final .................................................. 189Transtypage ......................................................................................................................... 190Classes abstraites ................................................................................................................ 192Accs protg ..................................................................................................................... 197

    Object : la superclasse cosmique .............................................................................................. 198La mthode equals ........................................................................................................... 198Test dgalit et hritage ..................................................................................................... 199

    Livre Java.book Page VI Mercredi, 13. fvrier 2008 2:34 14

  • Table des matires VII

    La mthode hashCode ....................................................................................................... 202La mthode toString ....................................................................................................... 204

    Listes de tableaux gnriques ................................................................................................... 210Accder aux lments dune liste de tableaux .................................................................... 212Compatibilit entre les listes de tableaux brutes et types ................................................. 216

    Enveloppes dobjets et autoboxing ........................................................................................... 217Mthodes ayant un nombre variable de paramtres ........................................................... 220

    Classes dnumration .............................................................................................................. 221Rflexion .................................................................................................................................. 223

    La classe Class ................................................................................................................. 224Introduction linterception dexceptions .......................................................................... 226La rflexion pour analyser les caractristiques dune classe .............................................. 227La rflexion pour lanalyse des objets lexcution .......................................................... 232La rflexion pour crer un tableau gnrique ..................................................................... 237Les pointeurs de mthodes ................................................................................................. 240

    Conseils pour lutilisation de lhritage ................................................................................... 244

    Chapitre 6. Interfaces et classes internes ................................................................................ 247Interfaces .................................................................................................................................. 248

    Proprits des interfaces ..................................................................................................... 253Interfaces et classes abstraites ............................................................................................ 254

    Clonage dobjets ....................................................................................................................... 255Interfaces et callbacks .............................................................................................................. 261Classes internes ........................................................................................................................ 264

    Accder ltat dun objet laide dune classe interne .................................................... 265Rgles particulires de syntaxe pour les classes internes ................................................... 268Utilit, ncessit et scurit des classes internes ................................................................ 269Classes internes locales ...................................................................................................... 271Accs aux variables final partir de mthodes externes ................................................. 272Classes internes anonymes ................................................................................................. 274Classes internes statiques .................................................................................................... 276

    Proxies ...................................................................................................................................... 280Proprits des classes proxy ............................................................................................... 284

    Chapitre 7. Programmation graphique .................................................................................... 287Introduction Swing ................................................................................................................ 288Cration dun cadre .................................................................................................................. 291Positionnement dun cadre ....................................................................................................... 294

    Proprits des cadres .......................................................................................................... 296Dterminer une taille de cadre adquate ............................................................................. 296

    Affichage des informations dans un composant ....................................................................... 300

    Livre Java.book Page VII Mercredi, 13. fvrier 2008 2:34 14

  • VIII Table des matires

    Formes 2D ................................................................................................................................ 305Couleurs ................................................................................................................................... 312Texte et polices ......................................................................................................................... 315Affichage dimages .................................................................................................................. 323

    Chapitre 8. Gestion des vnements .......................................................................................... 327Introduction la gestion des vnements ................................................................................. 327

    Exemple : gestion dun clic de bouton ............................................................................... 330Etre confortable avec les classes internes ........................................................................... 334Crer des couteurs contenant un seul appel de mthode .................................................. 337Exemple : modification du "look and feel" ......................................................................... 337Classes adaptateurs ............................................................................................................. 341

    Actions ..................................................................................................................................... 344Evnements de la souris ..................................................................................................... 352

    Hirarchie des vnements AWT ............................................................................................. 359Evnements smantiques et de bas niveau ......................................................................... 361

    Chapitre 9. Swing et les composants dinterface utilisateur ................................................... 365Swing et larchitecture Modle-Vue-Contrleur ...................................................................... 366

    Modles de conception ....................................................................................................... 366Larchitecture Modle-Vue-Contrleur .............................................................................. 367Une analyse Modle-Vue-Contrleur des boutons Swing .................................................. 370

    Introduction la gestion de mise en forme .............................................................................. 372Gestionnaire BorderLayout ................................................................................................ 374Disposition des grilles ........................................................................................................ 376

    Entre de texte .......................................................................................................................... 380Champs de texte .................................................................................................................. 380Etiquettes et composants dtiquetage ................................................................................ 382Champs de mot de passe ..................................................................................................... 383Zones de texte ..................................................................................................................... 384Volets de dfilement ............................................................................................................ 385

    Composants du choix ............................................................................................................... 387Cases cocher .................................................................................................................... 387Boutons radio ...................................................................................................................... 390Bordures ............................................................................................................................. 394Listes droulantes ............................................................................................................... 398Curseurs .............................................................................................................................. 402

    Menus ....................................................................................................................................... 408Cration dun menu ............................................................................................................ 408Icnes et options de menu .................................................................................................. 410

    Livre Java.book Page VIII Mercredi, 13. fvrier 2008 2:34 14

  • Table des matires IX

    Options de menu avec cases cocher et boutons radio ...................................................... 411Menus contextuels .............................................................................................................. 412Caractres mnmoniques et raccourcis clavier ................................................................... 414Activation et dsactivation des options de menu ................................................................ 416Barres doutils .................................................................................................................... 420Bulles daide ....................................................................................................................... 422

    Mise en forme sophistique ...................................................................................................... 425Gestionnaire GridBagLayout .............................................................................................. 427GroupLayout ....................................................................................................................... 436Cration sans gestionnaire de mise en forme ..................................................................... 445Gestionnaires de mise en forme personnaliss ................................................................... 446Squence de tabulation ....................................................................................................... 450

    Botes de dialogue .................................................................................................................... 451Botes de dialogue doptions .............................................................................................. 452Cration de botes de dialogue ............................................................................................ 461Echange de donnes ............................................................................................................ 466Botes de dialogue Fichier .................................................................................................. 472Slecteurs de couleur .......................................................................................................... 483

    Chapitre 10. Dployer des applets et des applications ............................................................. 491Les fichiers JAR ....................................................................................................................... 492

    Le manifeste ....................................................................................................................... 493Fichiers JAR excutables .................................................................................................... 494Les ressources ..................................................................................................................... 495Verrouillage ........................................................................................................................ 498

    Java Web Start .......................................................................................................................... 498Le bac sable ..................................................................................................................... 502Code sign .......................................................................................................................... 503LAPI JNLP ....................................................................................................................... 505

    Les applets ................................................................................................................................ 513Un petit applet .................................................................................................................... 514Conversion dune application en applet .............................................................................. 517Balises HTML et attributs pour applets .............................................................................. 518La balise object ................................................................................................................... 521Passer des informations un applet avec des paramtres ................................................... 521Accder aux images et fichiers audio ................................................................................. 526Le contexte dapplet ........................................................................................................... 528La communication interapplets .......................................................................................... 528Faire afficher des informations par le navigateur ............................................................... 528Cest un applet et cest aussi une application ! ................................................................... 530

    Livre Java.book Page IX Mercredi, 13. fvrier 2008 2:34 14

  • X Table des matires

    Stockage des prfrences dapplications .................................................................................. 535Concordances de proprits ................................................................................................ 536LAPI Preferences .............................................................................................................. 540

    Chapitre 11. Exceptions, consignation, assertion et mise au point ......................................... 547Le traitement des erreurs .......................................................................................................... 548

    Le classement des exceptions ............................................................................................. 549Signaler les exceptions sous contrle ................................................................................. 551Comment lancer une exception .......................................................................................... 553Crer des classes dexception ............................................................................................. 554

    Capturer les exceptions ............................................................................................................ 555Capturer des exceptions multiples ...................................................................................... 557Relancer et enchaner les exceptions .................................................................................. 557La clause finally .................................................................................................................. 558Analyser les traces de piles ................................................................................................. 561

    Quelques conseils sur lutilisation des exceptions ................................................................... 564Les assertions ........................................................................................................................... 567

    Activation et dsactivation des assertions ........................................................................... 568Vrification des paramtres avec des assertions ................................................................. 568Utiliser des assertions pour documenter des hypothses .................................................... 569

    La consignation ........................................................................................................................ 570Consignation de base .......................................................................................................... 571Consignation avance ......................................................................................................... 571Modifier la configuration du gestionnaire de journaux ...................................................... 574La localisation .................................................................................................................... 575Les gestionnaires ................................................................................................................ 576Les filtres ............................................................................................................................ 579Les formateurs .................................................................................................................... 579Une astuce de consignation ................................................................................................ 580

    Les techniques de mise au point ............................................................................................... 587Utiliser une fentre de console ........................................................................................... 593Tracer les vnements AWT ............................................................................................... 595Le robot AWT ..................................................................................................................... 598

    Utiliser un dbogueur ............................................................................................................... 602

    Chapitre 12. Programmation gnrique ................................................................................... 607Pourquoi la programmation gnrique ? .................................................................................. 608

    Y a-t-il un programmeur gnrique dans la salle ? ............................................................. 609Dfinition dune classe gnrique simple ................................................................................. 610Mthodes gnriques ................................................................................................................ 612Limites pour variables de type ................................................................................................. 613

    Livre Java.book Page X Mercredi, 13. fvrier 2008 2:34 14

  • Table des matires XI

    Code gnrique et machine virtuelle ........................................................................................ 615Traduire les expressions gnriques ................................................................................... 616Traduire les mthodes gnriques ...................................................................................... 617Appeler un code existant .................................................................................................... 619

    Restrictions et limites ............................................................................................................... 620Les paramtres de type ne peuvent pas tre instancis avec les types primitifs ................. 620Les informations sur le type dexcution ne fonctionnent quavec les types bruts ............ 620Vous ne pouvez pas lancer ou intercepter des instances dune classe gnrique ............... 621Les tableaux de types avec paramtres ne sont pas autoriss ............................................. 622Vous ne pouvez pas instancier des variables de type .......................................................... 622Les variables de type ne sont pas valables dans des contextes statiques des classes gnriques ........................................................................................................ 624Attention aux conflits aprs un effacement ........................................................................ 624

    Rgles dhritage pour les types gnriques ............................................................................ 625Types joker ............................................................................................................................... 627

    Limites de supertypes pour les jokers ................................................................................. 628Jokers sans limites .............................................................................................................. 630Capture de caractres joker ................................................................................................. 631

    Rflexion et gnrique .............................................................................................................. 634Utilisation des paramtres Class pour la concordance de type ................................... 635Informations de type gnrique dans la machine virtuelle ................................................. 636

    Chapitre 13. Collections ............................................................................................................. 643Les interfaces de collection ...................................................................................................... 643

    Sparer les interfaces dune collection et leur implmentation .......................................... 644Interfaces de collection et ditration dans la bibliothque Java ........................................ 646Suppression dlments ...................................................................................................... 649Mthodes utilitaires gnriques .......................................................................................... 649

    Les collections concrtes .......................................................................................................... 651Listes chanes .................................................................................................................... 652Listes de tableaux ............................................................................................................... 660Tables de hachage ............................................................................................................... 661Arbres ................................................................................................................................. 664Queues et deques ................................................................................................................ 670Queues de priorit ............................................................................................................... 671Cartes .................................................................................................................................. 673Classes de cartes et de set spcialises ............................................................................... 677

    La structure des collections ...................................................................................................... 681Les vues et les emballages .................................................................................................. 685Les oprations de masse ..................................................................................................... 691Conversion entre collections et tableaux ............................................................................ 692

    Livre Java.book Page XI Mercredi, 13. fvrier 2008 2:34 14

  • XII Table des matires

    Algorithmes .............................................................................................................................. 693Trier et mlanger ................................................................................................................. 694Recherche binaire ............................................................................................................... 696Algorithmes simples ........................................................................................................... 698Ecrire vos propres algorithmes ........................................................................................... 699

    Les anciennes collections ......................................................................................................... 700La classe Hashtable ............................................................................................................ 700Les numrations ................................................................................................................ 701Cartes de proprits ............................................................................................................ 702Piles .................................................................................................................................... 702Les ensembles de bits ......................................................................................................... 703

    Chapitre 14. Multithreads .......................................................................................................... 707Quest-ce quun thread ? .......................................................................................................... 708

    Utiliser des threads pour laisser une chance aux autres tches ........................................... 713Interrompre des threads ............................................................................................................ 718

    Les tats dun thread ........................................................................................................... 721Threads termins ................................................................................................................. 722

    Proprits dun thread .............................................................................................................. 724Priorits dun thread ........................................................................................................... 724Threads dmons .................................................................................................................. 725Gestionnaire dexceptions non rcupres ......................................................................... 725

    Synchronisation ........................................................................................................................ 727Exemple de condition de course ......................................................................................... 727Explication des conditions de course ................................................................................. 731Verrous dobjet ................................................................................................................... 732Objets de condition ............................................................................................................. 735Le mot cl synchronized ..................................................................................................... 740Blocs synchroniss ............................................................................................................. 743Le concept des moniteurs ................................................................................................... 745Champs volatiles ................................................................................................................. 745Verrous morts ...................................................................................................................... 747Test de verrous et temporisations ....................................................................................... 750Lire et crire des verrous .................................................................................................... 751

    Pourquoi les mthodes stop et suspend ne sont plus utilises .................................................. 752Queues de blocage .................................................................................................................... 754Collections compatibles avec les threads ................................................................................. 760

    Cartes, jeux et queues efficaces .......................................................................................... 761CopyOnWriteArray ........................................................................................................... 762Anciennes collections compatibles avec les threads .......................................................... 763

    Callable et Future ..................................................................................................................... 764

    Livre Java.book Page XII Mercredi, 13. fvrier 2008 2:34 14

  • Table des matires XIII

    Executors .................................................................................................................................. 768Pools de threads .................................................................................................................. 769Excution programme ....................................................................................................... 772Contrle de groupes de tches ............................................................................................ 773

    Synchronizers ........................................................................................................................... 774Smaphores ......................................................................................................................... 775Verrous Countdown ............................................................................................................ 776Barrires ............................................................................................................................. 776Exchanger ........................................................................................................................... 777Queues synchrones ............................................................................................................. 777Exemple : pause et reprise dune animation ....................................................................... 777Threads et Swing ................................................................................................................ 783Excution de tches longues ............................................................................................... 784Utilisation du travailleur Swing .......................................................................................... 788La rgle du thread unique ................................................................................................... 795

    Annexe. Les mots cls de Java ................................................................................................... 797

    Index .............................................................................................................................................. 801

    Livre Java.book Page XIII Mercredi, 13. fvrier 2008 2:34 14

  • Livre Java.book Page XIV Mercredi, 13. fvrier 2008 2:34 14

  • Introduction

    Avertissement au lecteurVers la fin de 1995, le langage de programmation Java surgit sur la grande scne dInternet et obtintimmdiatement un norme succs. La prtention de Java est de constituer la colle universelle capablede connecter les utilisateurs aux informations, que celles-ci proviennent de serveurs Web, de bases dedonnes, de fournisseurs dinformations ou de toute autre source imaginable. Et Java se trouve enbonne position pour relever ce dfi. Il sagit dun langage de conception trs robuste qui a t adoptpar la majorit des principaux fournisseurs, lexception de Microsoft. Ses caractristiques intgresde scurit offrent un sentiment de confiance aux programmeurs comme aux utilisateurs des applications.De plus, Java intgre des fonctionnalits qui facilitent grandement certaines tches de programma-tion avances, comme la gestion rseaux, la connectivit bases de donnes ou le dveloppementdapplications multitches.Depuis le lancement de Java, Sun Microsystems a mis sept rvisions majeures du kit de dvelop-pement 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 quela construction de linterface utilisateur, la gestion des bases de donnes, linternationalisation, lascurit et le traitement du code XML.Louvrage que vous tenez entre les mains est le premier volume de la huitime dition de Au cur deJava. Chaque dition a suivi la sortie du kit de dveloppement daussi prs que possible et, chaquefois, nous avons rcrit le livre pour y inclure les toutes dernires fonctionnalits. Cette dition a tmise jour pour traiter des nouveauts de Java Standard Edition (SE) 6.Ce livre, comme les ditions prcdentes, sadresse essentiellement aux programmeurs profession-nels dsireux dutiliser Java pour dvelopper de vritables projets. Nous considrons que le lecteurpossde dj une solide habitude de la programmation autre que Java et quil fuit les ouvrages quifourmillent dexemples dpourvus dutilit pratique (comme les grille-pain, les animaux du zoo oule "texte nerveux"). Vous nen trouverez pas ici. Notre objectif est de vous permettre dapprhenderle 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 traitsdans cet ouvrage. Ces programmes sont volontairement simples afin que le lecteur puisse se concen-trer sur les points importants. Nanmoins, dans la plupart des cas, il sagit dapplications utiles quipourront 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 la programmation oriente objet ;m le mcanisme de rflexion de Java et de proxy ;m les interfaces et classes internes ;

    Livre Java.book Page 1 Mercredi, 13. fvrier 2008 2:34 14

  • 2 Au cur de Java 2 - Notions fondamentales

    m le modle dcouteur dvnement ;m la conception dinterfaces graphiques avec la bote outils Swing ;m la gestion des exceptions ;m la programmation gnrique ;m le cadre des collections ;m la simultanit.Enfin, compte tenu de lexplosion de la bibliothque de classes de Java, nous avons d rpartir ltudede toutes les fonctionnalits sur deux volumes. Le premier, que vous avez en main, se concentre surles concepts fondamentaux du langage Java, ainsi que sur les bases de la programmation dune inter-face graphique. Le second volume traite plus exhaustivement des fonctionnalits dentreprise et de laprogrammation avance des interfaces utilisateur. Il aborde les sujets suivants :m les fichiers et les flux ;m les objets distribus ;m les bases de donnes ;m les composants GUI avancs ;m les mthodes natives ;m le traitement XML ;m la programmation rseau ;m le graphisme avanc ;m linternationalisation ;m JavaBeans ;m 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 desinexactitudes. Nous avons donc prpar sur le site Web http://horstmann.com/corejava une liste dequestions courantes, de corrections et dexplications. Un formulaire permettant de signaler desbogues et de suggrer des amliorations est plac stratgiquement la fin de la page des corrections(pour vous encourager la lire). Ne soyez pas du si nous ne rpondons pas chaque requte ou sinous 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 deprogrammation. Nous expliquerons les intentions des concepteurs du langage et nous montreronsdans quelle mesure ils sont parvenus leurs fins. Nous terminerons par un historique de Java et nousprciserons la manire dont il a volu.

    Livre Java.book Page 2 Mercredi, 13. fvrier 2008 2:34 14

  • Introduction 3

    Le Chapitre 2 vous indiquera comment tlcharger et installer le JDK et les exemples de programmedu livre. Nous vous guiderons ensuite dans la compilation et lexcution de trois programmes Javatypiques : une application console, une application graphique et un applet, grce du JDK brut, unditeur de texte activ pour Java et un IDE Java.Nous entamerons au Chapitre 3 une tude approfondie du langage, en commenant par les lmentsde 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 attenti-vement ce chapitre.La programmation oriente objet (POO) est maintenant au cur des mthodes modernes deprogrammation et Java est un langage orient objet. Le Chapitre 4 prsentera lencapsulation lapremire des deux notions fondamentales de lorientation objet et le mcanisme du langage Javaqui 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 aborderonsensuite le merveilleux outil javadoc qui permet de transformer les commentaires de votre code enune documentation au format HTML. Si vous tes un habitu du C++, vous pourrez vous contenterde parcourir rapidement ce chapitre. Les programmeurs qui ne sont pas familiariss avec la program-mation oriente objet doivent se donner le temps dtudier ces concepts avant de poursuivre leurexploration de Java.Les classes et lencapsulation ne constituent quune partie du concept de POO et le Chapitre 5 intro-duira lautre lment essentiel : lhritage. Celui-ci permet de rcuprer une classe existante et dela modifier 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 dedpasser le modle dhritage simple vu au Chapitre 5. En matrisant les interfaces, vous pourrezprofiter pleinement de lapproche oriente objet de la programmation Java. Nous traiterons gale-ment dans ce chapitre une caractristique technique trs utile de Java, appele classe interne. Lesclasses internes permettent dobtenir des programmes plus propres et plus concis.Au Chapitre 7, nous commencerons vritablement la programmation dapplications. Tout program-meur en Java doit connatre un minimum de programmation de GUI, des bases que vous trouverezdans ce volume. Nous vous montrerons comment crer des fentres, y dessiner et y tracer des figuresgomtriques, formater du texte avec diffrentes polices et afficher des images.Le Chapitre 8 sera consacr une tude dtaille du modle dvnement AWT, la bote outils defentre abstraite. Nous verrons comment crire le code permettant de rpondre des vnementstels que des clics de la souris ou des frappes de touches. Vous verrez par la mme occasion commentgrer 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 interfacesgraphiques multi-plates-formes. Vous apprendrez tout ce quil faut savoir sur les diffrents types deboutons, les composants de saisie, les bordures, les barres de dfilement, les zones de listes, les menuset 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 fichiers JAR et livrer des applications

    Livre Java.book Page 3 Mercredi, 13. fvrier 2008 2:34 14

  • 4 Au cur de Java 2 - Notions fondamentales

    sur Internet avec Java Web Start et les mcanismes dapplet. Enfin, nous verrons la manire dont lesprogrammes Java peuvent stocker et rcuprer des informations de configuration lorsquils ont tdploys.Le Chapitre 11 traitera de la gestion des exceptions, un mcanisme robuste qui sappuie sur le faitque mme les bons programmes peuvent subir des dommages. Les exceptions fournissent un moyenefficace de sparer le code normal de traitement et la gestion derreurs. Bien entendu, mme si vousavez scuris votre programme en grant toutes les conditions exceptionnelles, il nest pas certainquil fonctionne parfaitement. La seconde partie de ce chapitre vous donnera quelques astuces dedbogage. Pour terminer, nous vous accompagnerons dans une session de dbogage.Le Chapitre 12 donne une vue densemble de la programmation gnrique, une avance majeure deJava SE 5.0. Elle facilite la lecture de vos programmes, tout en les scurisant. Nous vous montreronscomment 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 anciennesversions de Java.Le Chapitre 13 traitera des cadres de collections de la plate-forme Java. Lorsque vous souhaiterezcollecter plusieurs objets pour les rcuprer plus tard, vous utiliserez une collection adapte votresituation, au lieu de simplement faire entrer les lments dans un tableau. Ce chapitre indiquecomment profiter des collections standard dj cres pour vous.Le Chapitre 14 clturera ce livre avec une discussion sur le multithreading, qui permet de program-mer des tches raliser en parallle (un thread est un flux de contrle dans un programme). Nousvous indiquerons comment configurer les threads et en grer la synchronisation. Le multithreading abeaucoup 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 Courierpour le code des programmes.

    INFO

    ASTUCE

    Les infos et les astuces sont repres par une de ces deux icnes.

    ATTENTION

    Une 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 vousntes pas familiaris avec ce langage.

    Livre Java.book Page 4 Mercredi, 13. fvrier 2008 2:34 14

  • Introduction 5

    API Java

    Java est accompagn dune importante bibliothque de programmation (API, ApplicationProgramming Interface). Lorsque nous utilisons pour la premire fois un appel lAPI, nousproposons galement une brve description dans une note "API" situe la fin de la section. Cesdescriptions sont un peu plus informelles que celles de la documentation officielle en ligne, maisnous esprons quelles sont plus instructives.

    Les programmes dont le code source se trouve sur le Web sont fournis sous forme de listings, commececi :

    Listing 2.4 : WelcomeApplet.java

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

    Livre Java.book Page 5 Mercredi, 13. fvrier 2008 2:34 14

  • Livre Java.book Page 6 Mercredi, 13. fvrier 2008 2:34 14

  • 1Une introduction Java

    Au 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 Java

    La premire version de Java, sortie en 1996, a fait natre beaucoup de passions, pas seulement auniveau de la presse informatique, mais galement dans la presse plus gnraliste comme The NewYork Times, The Washington Post et Business Week. Java prsente lavantage dtre le premier et leseul langage de programmation dont lhistoire est conte la radio. Il est plutt amusant de revisitercette 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 bonlangage de programmation. Il sagit, sans aucun doute, de lun des meilleurs disponibles pour unprogrammeur 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 leproblme de la compatibilit avec le code existant."Un haut responsable de Sun Microsystems, que nous ne nommerons pas, a adress notre diteur denombreux 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. Mmesil en existe foison, peu font beaucoup dclats. Java est une plate-forme complte, disposant

    Livre Java.book Page 7 Mercredi, 13. fvrier 2008 2:34 14

  • 8 Au cur de Java 2 - Notions fondamentales

    dune importante bibliothque, dune grande quantit de code rutilisable et dun environnementdexcution qui propose des services tels que la scurit, la portabilit sur les systmes dexploitationet le ramasse-miettes automatique. En tant que programmeur, vous voulez un langage la syntaxe agrable et la smantique compr-hensible (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 nedisposent pas de vraie bibliothque, ce qui vous oblige dployer la vtre si vous souhaitez utiliserde beaux graphiques, le rseau ou laccs aux bases de donnes. Java regroupe tout cela : un langage dequalit, un environnement dexcution idoine et une grande bibliothque. Cest cette combinaisonqui fait de Java une proposition laquelle de nombreux programmeurs ne rsistent pas.

    Les termes cls du livre blanc de Java

    Les auteurs de Java ont crit un important livre blanc qui prsente les objectifs et les ralisations deleur conception. Ce livre sarticule autour des onze termes cls suivants :

    Simplicit PortabilitOrient objet InterprtCompatible avec les rseaux Performances levesFiabilit MultithreadScurit DynamiqueArchitecture neutre

    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 ;m exprimer ce que nous pensons de chaque terme, partir de notre exprience de la version

    actuelle de Java.

    INFO

    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 figure ladresse http://java.sun.com/docs/overviews/java/java-overview-1.html.

    Simplicit

    * Nous avons voulu crer un systme qui puisse tre programm simplement, sans ncessiter un apprentis-sage sotrique, et qui tire parti de lexprience standard actuelle. En consquence, mme si nouspensions que C++ ne convenait pas, Java a t conu de faon relativement proche de ce langage dansle 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 quedavantages, ont t supprimes de Java.

    Livre Java.book Page 8 Mercredi, 13. fvrier 2008 2:34 14

  • Chapitre 1 Une introduction Java 9

    La syntaxe de Java reprsente rellement une version amliore de C++. Les fichiers den-tte,larithmtique des pointeurs (ou mme une syntaxe de pointeur), les structures, les unions, lasurcharge doprateur, les classes de base virtuelles, etc., ne sont plus ncessaires (tout au long decet ouvrage, nous avons inclus des notes Info C++ dcrivant plus prcisment les diffrences entreJava et C++). Les concepteurs nont cependant pas tent de modifier certaines fonctions piges deC++ telles que linstruction switch. Si vous connaissez C++, le passage la syntaxe de Java voussemblera facile.

    Si vous tes habitu un environnement de programmation visuel (tel que Visual Basic), le langageJava vous paratra plus complexe. Une partie de la syntaxe vous semblera trange (mme si samatrise est rapide). Plus important encore, la programmation en Java ncessitera davantage detravail. Lintrt de Visual Basic rside dans le fait que son environnement visuel de conception four-nit de faon presque automatique une grande partie de linfrastructure dune application. En Java, lafonctionnalit quivalente doit tre programme manuellement, gnralement laide dune quantitrespectable de code. Il existe cependant des environnements de dveloppement tiers qui permettentlcriture 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 logi-ciels de sexcuter intgralement sur de modestes machines. Ainsi, la taille cumule de linterprteur debase et du support des classes est denviron 40 Ko ; pour supporter les classes standard ainsi que lagestion multitraitement (threads), il faut ajouter 175 Ko.

    Cest un exploit. Toutefois, sachez que la taille de la bibliothque a atteint des proportions consi-drables. 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 seconcentre sur les donnes (les objets) et sur les interfaces avec ces objets. Pour faire une analogie avecla 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 "nonorient objet" penserait dabord ses outils. Les facilits orientes objet de Java sont essentiellementcelles de C++...

    Au cours des trente dernires annes, la programmation oriente objet a prouv ses avantages, et ilest inconcevable quun langage de programmation moderne nen tire pas parti. En fait, les fonction-nalits orientes objet de Java sont comparables celles de C++. Les diffrences majeures rsidentdans lhritage multiple (que Java a remplac par le concept plus simple des interfaces) et le modleobjet de Java (mtaclasses), que nous verrons au Chapitre 5.

    INFO

    Si vous navez aucune exprience des langages de programmation oriente objet, prenez soin de lire attentivementles Chapitres 4 6. Ils vous expliquent ce quest la programmation oriente objet et pour quelles raisons elle est plusutile la programmation de projets sophistiqus que ne le sont les langages procduraux comme C ou Basic.

    Livre Java.book Page 9 Mercredi, 13. fvrier 2008 2:34 14

  • 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 telsque HTTP et FTP. Les applications Java peuvent charger des objets sur Internet et y accder via desURL avec la mme facilit quelles accdent un fichier local sur le systme.

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

    Fiabilit

    * Java a t conu pour que les programmes qui lutilisent soient fiables sous diffrents aspects. Saconception encourage le programmeur traquer prventivement les ventuels problmes, lancerdes vrifications 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 unmodle de pointeur qui carte les risques dcrasement de la mmoire et dendommagement desdonnes.

    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 quiont pass des heures rcuprer une mmoire corrompue par un bogue de pointeur seront trsheureux dexploiter cette caractristique de Java.Si vous connaissez dj des langages comme Visual Basic, qui nexploitent pas les pointeurs defaon explicite, vous vous demandez srement pourquoi ce problme est si important. Les program-meurs en C nont pas cette chance. Ils ont besoin des pointeurs pour accder des chanes, destableaux, des objets et mme des fichiers. Dans Visual Basic, vous nemployez de pointeur pouraucune de ces entits, pas plus que vous navez besoin de vous soucier de leurs allocations enmmoire. En revanche, certaines structures de donnes sont difficiles implmenter sans laide depointeurs. Java vous donne le meilleur des deux mondes. Vous navez pas besoin des pointeurs pourles constructions habituelles, comme les chanes et les tableaux. Vous disposez de la puissance despointeurs en cas de ncessit, par exemple, pour construire des listes chanes. Et cela en toute scu-rit dans la mesure o vous ne pouvez jamais accder un mauvais pointeur ni faire des erreursdallocation 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 scuritna 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 toneau." Et nous avions raison. Peu aprs la publication de la premire version du JDK, un groupedexperts de la scurit de luniversit de Princeton a localis les premiers bogues des caractristiquesde scurit de Java 1.0. Sun Microsystems a encourag la recherche sur la scurit de Java, en

    Livre Java.book Page 10 Mercredi, 13. fvrier 2008 2:34 14

  • Chapitre 1 Une introduction Java 11

    rendant publiques les caractristiques et limplmentation de la machine virtuelle et des bibliothquesde scurit. Il a rpar rapidement tous les bogues connus. Quoi quil en soit, Java se charge derendre particulirement difficile le contournement des mcanismes de scurit. Jusqu prsent, lesbogues 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 la surcharge de la pile dexcution, une attaque commune des vers et des virus ;

    m lendommagement de la mmoire situe lextrieur de son propre espace de traitement ;

    m la lecture ou lcriture des fichiers 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 deJava 2 Volume II, ditions CampusPress), qui vous permet de savoir qui la crite. Votre degrde confiance envers son auteur va dterminer lampleur des privilges que vous allez accorder laclasse sur votre machine.

    Le 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 suffisant.Tous les utilisateurs des produits Microsoft peuvent confirmer que les programmes proposs par des concepteursbien connus rencontrent des dfaillances qui provoquent des dgts. Le modle de scurit de Java est nettementplus puissant que celui dActiveX dans la mesure o il contrle lapplication en cours dexcution et lempche defaire des ravages.

    Architecture neutre

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

    Lide nest pas nouvelle. Il y a plus de trente ans, la mise en uvre originale de Pascal par NiklausWirth et le systme Pascal UCSD utilisaient tous deux la mme approche.

    Bien entendu, linterprtation des bytecodes est forcment plus lente que lexcution des instruc-tions machine pleine vitesse. On peut donc douter de la pertinence de cette ide. Toutefois, lesmachines virtuelles ont le choix de traduire les squences de bytecode frquemment utilises encode machine, une procdure appele compilation en "juste--temps" (just-in-time ou JIT). Cettestratgie sest rvle tellement efficace que la plate-forme .NET de Microsoft va jusqu reposer surune machine virtuelle.

    La machine virtuelle prsente dautres avantages. Elle accrot la scurit car elle est en mesure de vri-fier le comportement des suites dinstructions. Certains programmes vont jusqu produire des bytecodes la vole, en amliorant dynamiquement les capacits dun programme en cours dexcution.

    INFO

    Livre Java.book Page 11 Mercredi, 13. fvrier 2008 2:34 14

  • 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 laspcification. Les tailles des types de donnes primaires sont spcifies, ainsi que le comportement arith-mtique qui leur est applicable.

    Par exemple, en Java, un int est toujours un entier en 32 bits. Dans C/C++, int peut reprsenterun 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 nepeut pas en contenir plus quun longint. Le principe dune taille fixe pour les types numriqueslimine les principaux soucis du portage dapplications. Les donnes binaires sont stockes ettransmises dans un format fixe, ce qui met fin la confusion sur lordre des octets. Les chanes sontenregistres au format Unicode standard.

    * Les bibliothques intgres au systme dfinissent des interfaces portables. Par exemple, il existe uneclasse 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 enproposant un kit doutils simples sachant "coller" aux principaux composants dinterface utilisateurdun 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, onrencontrait souvent des bogues diffrents sur les diffrentes implmentations graphiques. Mais centait quun dbut. Il existe de nombreuses applications pour lesquelles la portabilit est plus impor-tante que lefficacit de linterface utilisateur, et ce sont celles qui ont bnfici des premiresversions de Java. Aujourdhui, le kit doutils de linterface utilisateur a t entirement rcrit demanire ne plus dpendre de linterface utilisateur de lhte. Le rsultat est nettement plus cohrentet 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 surlaquelle il a t port. Dans la mesure o la liaison est un processus plus incrmentiel et lger, le processusde dveloppement peut se rvler plus rapide et exploratoire.

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

    Performances leves

    * En rgle gnrale, les performances des bytecodes interprts sont tout fait suffisantes ; il existe toute-fois des situations dans lesquelles des performances plus leves sont ncessaires. Les bytecodespeuvent 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

    Livre Java.book Page 12 Mercredi, 13. fvrier 2008 2:34 14

  • Chapitre 1 Une introduction Java 13

    quils concurrencent les compilateurs traditionnels et, dans certains cas, les dpassent du fait quilsdisposent de davantage dinformations. Par exemple, un compilateur JIT est capable didentifier ducode souvent excut et doptimiser exclusivement la vitesse de celui-ci. Une optimisation pluspousse consiste liminer les appels de fonctions. Le compilateur en juste--temps connat lesclasses qui ont t charges. Il peut utiliser la suppression lorsque, en fonction de la collectionde classes actuellement charge, une fonction particulire nest jamais crase. Il peut ensuiteannuler 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 agra-blement surpris de la simplicit de cette tche dans Java. Avec lui, les threads sont galementcapables de tirer parti des systmes multiprocesseurs. Le ct ngatif rside dans le fait que lesimplmentations de threads sur les plates-formes principales sont trs diffrentes, et Java ne faitaucun effort pour tre indpendant de la plate-forme cet gard. La seule partie de code identiqueentre les diffrentes machines est celle de lappel du multithread. Java se dcharge de limplmen-tation 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 ledveloppement 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 nouvellesmthodes et variables sans pour autant affecter leurs clients. La recherche des informations de typeexcution 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 relativementcomplexe. A lheure actuelle, les versions courantes de Java procurent au programmeur un aperucomplet de la structure et du comportement de ses objets. Cela se rvle trs utile pour les systmesncessitant une analyse des objets au cours de lexcution, tels que les gnrateurs graphiques deJava, les dbogueurs volus, les composants enfichables et les bases de donnes objet.

    INFO

    Peu aprs les premiers succs de Java, Microsoft a sorti un produit intitul J++ qui prsente un lien de parent avecJava. Pour lheure, Microsoft ne prend plus en charge J++ mais a introduit un nouveau langage, appel C#, quiprsente aussi de nombreuses similarits avec Java mais utilise une autre machine virtuelle. Il existe mme un J# pourfaire 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.

    Livre Java.book Page 13 Mercredi, 13. fvrier 2008 2:34 14

  • 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 lesexcutent sur leurs propres machines. Les programmes Java sexcutant sur les pages Web sontnomms 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 licencele code source de Java et affirme quaucun changement naffectera le langage et la structure de labibliothque de base. Vous obtiendrez la dernire version du programme ds que vous visiterezla page Web contenant lapplet. Et surtout, grce la scurit de la machine virtuelle, vous naurezplus vous inquiter des attaques provenant dun code hostile.Lorsque lutilisateur tlcharge un applet, il sagit presque de lintgration dune image dans unepage Web. Lapplet sinsre dans la page et le texte se rpartit dans son espace. Le fait est quelimage est vivante. Elle ragit aux commandes utilisateur, change dapparence et transfre lesdonnes entre lordinateur qui prsente lapplet et lordinateur qui la sert.L