guide de java (livre)

1070

Upload: bojane

Post on 02-Jan-2016

109 views

Category:

Documents


0 download

DESCRIPTION

Un guide complet et intégrale sue le langage de programmation Java 2. C'est un référentiel indispensable aux programmeurs.

TRANSCRIPT

  • OEM nest li aucun constructeur.

    Ce livre mentionne des noms de produits qui peuvent tre des marques dposes ; toutes ces marques sontreconnues.

    Javatm et HotJavatm sont des marques de Sun Microsystems, Inc. (http://java.sun.com).

    Winzip est une marque dpose de Nico Mak Computing, Inc. Winzip est distribu en France exclusivement parAB SOFT, Parc Burospace 14, 91572 Bievres cedex. Tel 01 69 33 70 00 Fax 01 69 33 70 10 (http://www.absoft.fr).

    UltraEdit est une marque de IDM Computer Solutions, Inc. (http://www.idmcomp.com).

    Nos auteurs et nous-mmes apportons le plus grand soin la ralisation et la production de nos livres, pourvous proposer une information de haut niveau, aussi complte et fiable que possible. Pour autant, OEM ne peutassumer de responsabilit ni pour lutilisation de ce livre, ni pour les contrefaons de brevets ou atteintes auxdroits de tierces personnes qui pourraient rsulter de cette utilisation.

    LE PHOTOCOPILLAGE TUE LE LIVRE

    Le code de la proprit intellectuelle du 1er juillet 1992 interdit expressment la photocopie usage collectif sanslautorisation des ayants droits. En application de la loi du 11 mars 1957, il est interdit de reproduire tout oupartie du prsent livre, et ce sur quelque support que ce soit, sans lautorisation de lditeur.

    OEM 2000

    ISBN 2-7464-0204-1

    1, rue Thnard 75005 Paris

    Fax : 01 44 41 46 00http://www.oemweb.com

    Pour toute question technique concernant ce livre :http://www.volga.fr/[email protected]

    (consulter pralablement les instructions page xxxviii)

  • Pierre-Yves SaumontAntoine Mirecourt

  • Dans la collection La Rfrence:

    Le Dveloppeur JAVA 2 Mise en oeuvre et solutions - Les applets

    Windows 98

    Internet et Internet Explorer 5

    Le nouveau guide technique et pratique du PC

    Office 2000

    Word 2000

    Dreamweaver 3

    Access 2000 et VBA Le guide du dveloppeur

    Excel 2000

    Flash 4

    GoLive 4.0 Mac & PC Le guide de lutilisateur

    Windows Programmation avec Java et WFC

    Excel 2000 et VBA Le guide du dveloppeur

    XML Le guide de lutilisateur

    AutoCAD 2000 Le guide de lutilisateur

    Le Newton Nouveau dictionnaire des tlcommunications, delInformatique et de lInternet

    Paint Shop Pro 6

    Windows 2000 Professionnel Le guide de lutilisateur

    Active Server Pages 3.0 Le guide du dveloppeur

    Le guide officiel des imprimantes Achat Utilisation Entretien

    Red Hat Linux Le guide de lutilisateur

  • Introduction xxiii

    Pourquoi Java ? xxiiiQu'est-ce que Java ? xxix

    Java est un langage orient objets xxixJava est extensible l'infini xxxiiJava est un langage haute scurit xxxiiiJava est un langage simple apprendre xxxivJava est un langage compil xxxvi

    Les compilateurs natifs xxxviLes compilateurs de bytecode xxxviiLes compilateurs JIT xxxviiiLa technologie HotSpot xxxix

    Le premier langage du troisime millnaire ? xlVoir Java luvre xli

  • VI LE DVELOPPEUR JAVA 2

    Support technique xliAller plus loin xliv

    Chapitre 1 : Installation de Java 1

    Configuration ncessaire 3Ordinateur 3Systme 3Mmoire 4Disque 4

    Installation du J2SDK 4Ce que contient le J2SDK 7Configuration de l'environnement 14

    Le chemin d'accs aux programmes excutables 15Le chemin d'accs aux classes Java 17Amliorer le confort d'utilisation 20

    Le Java 2 Runtime Environment 22Installation du J2RE Windows 26

    Installation de la documentation en ligne 27Un navigateur HTML compatible Java 29

    HotJava 30Netscape Navigator 30Internet Explorer 32

    Un diteur pour la programmation 33Ce que doit offrir un diteur 34UltraEdit 34Quelques petits fichiers batch qui vous simplifieront la vie 35

    Un environnement de dveloppement 37Avantages 37Inconvnients 39Quel environnement ? 39Forte for Java 40

    O trouver les informations ? 41Le site Web de Sun 41

  • SOMMAIRE VII

    Le JDC 42Les autres sites Web ddis Java 43Le site du Dveloppeur Java 2 43Les sites consacrs au portage du J2SDK 44Les Newsgroups 45

    Chapitre 2 : Votre premier programme 47

    Premire version : un programme minimal 48Analyse du premier programme 52Premire applet 63Analyse de la premire applet 65Une faon plus simple d'excuter les applets 71Rsum 72Exercice 73

    Chapitre 3 : Les objets Java 75

    Tout est objet 78Les classes 78Pertinence du modle 80Les instances de classes 83Les membres de classes 84Les membres statiques 85Les constructeurs 86

    Cration d'un objet 89La destruction des objets : le garbage collector 94Comment retenir les objets : les handles 95

    Cration des handles 97Modifier l'affectation d'un handle 97

    Rsum 99Exercice 100

  • VIII LE DVELOPPEUR JAVA 2

    Chapitre 4 : Les primitives et les handles 101

    Les primitives 103Utiliser les primitives 105Valeurs par dfaut des primitives 109Diffrences entre les objets et les primitives 111Les valeurs littrales 117

    Le casting des primitives 119Le casting explicite 120Casting d'une valeur entire en valeur flottante 121Casting d'une valeur flottante en valeur entire 122

    Formation des identificateurs 122Porte des identificateurs 125

    Porte des identificateurs de mthodes 130Les objets n'ont pas de porte 131

    Les chanes de caractres 132Constantes 136

    Utilisation de final avec des objets 137Accessibilit 137Retour sur les variables statiques 137

    Masquage des identificateurs de type static 145Java et les pointeurs 148Exercices 149

    Premire question (page 112) 149Deuxime question (page 138) 150

    Rsum 151

    Chapitre 5 : Crez vos propres classes 153

    Tout est objet (bis) 154L'hritage 155Les constructeurs 158Rfrence la classe parente 161

  • SOMMAIRE IX

    La redfinition des mthodes 161Surcharger les mthodes 164

    Signature d'une mthode 165Optimisation 167

    Surcharger les constructeurs 171Les constructeurs par dfaut 174Les initialiseurs 182

    Les initialiseurs de variables d'instances 183Les initialiseurs d'instances 184Ordre d'initialisation 186

    Mthodes : les valeurs de retour 188Surcharger une mthode avec une mthodede type diffrent 192Distinction des mthodes surchargespar le type uniquement 194Le retour 196

    Rsum 198Exercice 199

    Chapitre 6 : Les oprateurs 203

    Java et les autres langages 204L'oprateur d'affectation 205

    Raccourci 206Les oprateurs arithmtiques deux oprandes 207

    Les oprateurs deux oprandeset le sur-casting automatique 208Les raccourcis 211

    Les oprateurs un oprande 213Les oprateurs relationnels 216Les oprateurs logiques 225Les oprateurs d'arithmtique binaire 229

  • X LE DVELOPPEUR JAVA 2

    Consquences du sur-casting automatiquesur l'extension de zro 236Utilisation des oprateurs d'arithmtique binaireavec des valeurs logiques 240Utilisation de masques binaires 241

    L'oprateur trois oprandes ?: 243Les oprateurs de casting 244

    Les oprateurs de casting et les valeurs littrales 246L'oprateur new 246L'oprateur instanceof 246Priorit des oprateurs 247Rsum 252

    Chapitre 7 : Les structures de contrle 253

    La squence 254Le branchement par appel de mthode 254L'instruction de branchement return 257L'instruction conditionnelle if 257L'instruction conditionnelle else 260

    Les instructions conditionnelles et les oprateurs ++ et -- 262Les instructions conditionnelles imbriques 262

    La boucle for 267L'initialisation 267Le test 268L'incrmentation 270Le bloc d'instructions 271

    Modification des indices l'intrieur de la boucle 272Imbrication des boucles for 272Type des indices 273Porte des indices 275Sortie d'une boucle par return 278

    Branchement au moyen des instructions break et continue 279

  • SOMMAIRE XI

    Utilisation de break et continue avec des tiquettes 281L'instruction while 282L'instruction switch 288L'instruction synchronized 295Rsum 296

    Chapitre 8 : Laccessibilit 297

    Les packages (O) 301Chemins d'accs et packages 305L'instruction package 305Placement automatique des fichiers .classdans les rpertoires correspondant aux packages 308Excution du programme 309Chemin d'accs par dfaut pour les packages 310L'instruction import 311Packages accessibles par dfaut 315Les fichiers .jar 316

    Cration de vos propres fichiers .jar ou .zip 317Comment nommer vos packages ? 318

    Ce qui peut tre fait (Quoi) 319static 320

    Les variables static 320Les mthodes static 323Initialisation des variables static 324Les initialiseurs statiques 325

    final 327Les variables final 327Les variables final non initialises 328Les mthodes final 329Les classes final 331

    synchronized 331native 333transient 333

  • XII LE DVELOPPEUR JAVA 2

    volatile 333abstract 334Les interfaces 336

    Qui peut le faire (Qui) 336public 337protected 337package 338private 338Autorisations d'accs aux constructeurs 339

    Rsum 345

    Chapitre 9 : Le polymorphisme 347

    Le sur-casting des objets 349Retour sur l'initialisation 350Le sur-casting 352Le sur-casting explicite 357Le sur-casting implicite 358Le sous-casting 359Le late binding 361Les interfaces 367

    Utiliser les interfaces pour grer des constantes 368Un embryon d'hritage multiple 370Le polymorphisme et les interfaces 371Pas de vrai hritage multiple 375Quand utiliser les interfaces ? 378

    Hritage et composition 381Rsum 385

    Chapitre 10 : Les tableaux et les collections 387

    Les tableaux 388Dclaration 388

  • SOMMAIRE XIII

    Initialisation 389Initialisation automatique 390

    Les tableaux littraux 391Les tableaux de primitives sont des objets 393

    Le sur-casting implicite des tableaux 393Les tableaux d'objets sont des tableaux de handles 398La taille des tableaux 400Les tableaux multidimensionnels 404Les tableaux et le passage d'arguments 406Copie de tableaux 409

    Les vecteurs 413Le type Stack 417Le type BitSet 418Les tables (Map) 419

    Les tables ordonnes (SortedMap) 421Le type Hashtable 421Les collections 422

    Les listes (List) 424Les ensembles (Set) 426Les ensembles ordonns (SortedSet) 427

    Les itrateurs 427Les itrateurs de listes 429

    Les comparateurs 430Les mthodes de la classe Collections 439

    Exemple : utilisation de la mthode sort() 441Rsum 445

    Chapitre 11 : Les objets meurent aussi 447

    Certains objets deviennent inaccessibles 447Que deviennent les objets inaccessibles ? 452Le garbage collector 454

    Principe du garbage collector 454

  • XIV LE DVELOPPEUR JAVA 2

    Optimiser le travail du garbage collector 456Les finaliseurs 458Contrler le travail du garbage collector 463Rfrences et accessibilit 467Les rfrences faibles 469

    SoftReference 471WeakReference 471PhantomReference 472Les queues 472Exemple d'utilisation de rfrences faibles 473

    Autres formes de contrle du garbage collector 477La finalisation et l'hritage 484La finalisation et le traitement d'erreur 486Contrler le garbage collector l'aide des options de l'interprteur 486Rsum 487

    Chapitre 12 : Les classes internes 489

    Les classes imbriques 489Les classes membres 497

    Instances externes anonymes 506Classes membres et hritage 508Remarque concernant les classes membres 511

    Les classes locales 515Les handles des instances de classes locales 517

    Les classes anonymes 522Comment sont nommes les classes anonymes 525

    Rsum 527

    Chapitre 13 : Les exceptions 529

    Stratgies de traitement des erreurs 530

  • SOMMAIRE XV

    Signaler et stopper 531Corriger et ressayer 531Signaler et ressayer 531La stratgie de Java 531

    Les deux types d'erreurs de Java 532Les exceptions 534Attraper les exceptions 535Dans quelle direction sont lances les exceptions ? 537Manipuler les exceptions 538

    Modification de l'origine d'une exception 540Crer ses propres exceptions 549La clause finally 554Organisation des handlers d'exceptions 558Pour un vritable traitement des erreurs 560D'autres objets jetables 562Les exceptions dans les constructeurs 562Exceptions et hritage 562Rsum 563

    Chapitre 14 : Les entres/sorties 565

    Principe des entres/sorties 566Les streams de donnes binaires 567

    Les streams d'entre 567Streams de communication 567Streams de traitement 567

    Les streams de sortie 568Streams de communication 569Streams de traitement 569

    Les streams de caractres 570Les streams d'entre 571

    Streams de communication 571Streams de traitement 571

  • XVI LE DVELOPPEUR JAVA 2

    Les streams de sortie 572Streams de communication 572Streams de traitement 573

    Les streams de communication 573Lecture et criture d'un fichier 575

    Les streams de traitement 576Exemple de traitement : utilisation d'un tampon 582Exemple de traitement : conversion des fins de lignes 583Compression de donnes 584Dcompression de donnes 590

    La srialisation 591Les fichiers accs direct 594Rsum 599

    Chapitre 15 : Le passage des paramtres 601

    Passage des paramtres par valeur 601Passage des paramtres par rfrence 602Passer les objets par valeur 605Le clonage des objets 606Clonage de surface et clonage en profondeur 609Clonage en profondeur d'un objet de type inconnu 615Clonabilit et hritage 616

    Interdire le clonage d'une classe drive 619Une alternative au clonage : la srialisation 620Une autre alternative au clonage 625Rsum 627

    Chapitre 16 : Excuter plusieurs processus simultanment 629

    Qu'est-ce qu'un processus ? 630Avertissement 630Comment fonctionnent les threads 631

  • SOMMAIRE XVII

    Principes de synchronisation 637Les oprations atomiques 637Granularit de la synchronisation 640Atomicit apparente 641

    Crer explicitement un thread 641Excuter plusieurs threads simultanment 643Caractristiques des threads 649Contrler les threads 650

    Utilisation des groupes pour rfrencer les threads 653Grer la rpartition du temps entre les threads 659

    La priorit 662La synchronisation 664Problmes de synchronisation 672Mise en uvre d'un dmon 682Communication entre les threads : wait et notifyAll 685Rsum 689Exercice 690

    Chapitre 17 : RTTI et Rflexion 693

    Le RTTI ou comment Java vrifie les sous-castings explicites 693Connatre la classe d'un objet 696Instancier une classe l'aide de son objet Class 700Connatre la classe exacte d'un objet 701Utiliser la rflexion pour connatre le contenu d'une classe 702

    Utilit de la rflexion 702Utiliser la rflexion pour manipuler une classe interne 708

    Utiliser la rflexion pour crer des instances 710Conclusion : quand utiliser la rflexion ? 710

    Chapitre 18 : Fentres et boutons 713

    Les composants lourds et les composants lgers 714

  • XVIII LE DVELOPPEUR JAVA 2

    Les composants lourds 714Les composants lgers 715Le look & feel 716

    Les fentres 717Hirarchie des fentres Java 717Structure d'une fentre 718Les layout managers 721

    Crer une application fentre 721Quel vnement intercepter ? 723

    Intercepter les vnements de fentre 724Les vnements et les listeners 724

    Utilisation des composants 733Utilisation des layout managers 736

    Philosophie des layout managers 736Bien utiliser les layout managers 742

    Utilisation du FlowLayout 746Utilisation d'un layout plusieurs niveaux 751Utilisation du GridBagLayout 755

    Rendre l'interface rellement indpendante du systme 762Affichage sans layout manager 765Crer votre propre layout manager 766Les lments de l'interface utilisateur 769

    Les boutons 770Les vnements de souris 777Les menus 785Les fentres internes 790

    Le plaf (Pluggable Look And Feel) 796Exemples de composants 805

    Rsum 820

    Chapitre 19 : Le graphisme 821

    Les primitives graphiques 821

  • SOMMAIRE XIX

    Les objets graphiques 822Un composant pour les graphismes 822Les diffrentes primitives 828

    L'affichage du texte 844Les polices de caractres 845

    Les images 853Obtenir une image 854Surveiller le chargement d'une image 856

    Conclusion 864

    Chapitre 20 : Applets et Rseaux 865

    Les applets 865Cration d'une applet 866

    Problmes de compatibilit entre les versions 867Avertissement 869Deuxime avertissement 869

    Fonctionnement d'une applet 870Passer des paramtres une applet 871Agir sur le navigateur 876

    Afficher un nouveau document 877Afficher un message dans la barre d'tat 880Afficher des images 881Les sons 881

    Optimiser le chargement des applets l'aide des fichiers d'archives 883Les applets et la scurit 884

    Mettre en place les autorisations 885Comment Java utilise les fichiers d'autorisations 889

    Utiliser le security manager avec les applications 890Accder un URL partir d'une application 890Conclusion 894

  • Chapitre 21 : Prsentation des Java-Beans 897

    Le concept de Beans 897Le Beans Development Kit 899

    Installation du BDK 899Utilisation de la BeanBox 902

    Ajouter un beans dans la fentre de composition 903Slection d'un bean dans la fentre de composition 904Dplacement d'un bean 905Redimensionner un bean 905Modifier les proprits d'un beans 905Installer un handler d'vnement 906Relier des proprits 910Enregistrer les beans 912Gnrer une applet 914

    Cration d'un Bean 915Codage d'un bean 916Cration d'un conteneur de test 918Packager un bean 919

    Prparation du manifeste 919Cration de l'archive 921Utilisation du bean dans la BeanBox 922

    Rsum 922

    Chapitre 22 : Les servlets et les Java Server Pages 925

    Qu'est-ce qu'une Servlet ? 926Structure et cycle de fonctionnement d'une servlet HTTP 927Ce dont vous avez besoin 928

    Installation du JSWDK 1.0.1 929Configuration du chemin d'accs aux classes 930

    Modification du fichier startserver.bat 930Cration d'un raccourci 930

    Le rpertoire webpages 931

  • SOMMAIRE XXI

    Dmarrage du serveur 932Accs au serveur 932Arrter le serveur 933Configuration du serveur 934

    Test d'une servlet 936Cration d'une servlet 939

    Configuration de la variable d'environnement classpath 940Codage de la servlet 940Utilisation de la premire servlet 941Description de la premire servlet 941

    Une servlet pour exploiter un formulaire 947Codage de la servlet 948Le formulaire 952Utilisation du formulaire 954Problmes de synchronisation 957Comparaison avec Perl 958

    Perl 958Java 959

    Les servlets pour remplacer les SSI 959Un compteur d'accs 961

    Les Java Server Pages 965Directives 966Dclarations 967Scriplets 967Expressions 967Le code gnr 968

    Rsum 971

    Annexe A : Les classes String et StringBuffer 973

    L'oprateur + 973Les constructeurs de la classe String 974La classe StringBuffer 978

  • XXII LE DVELOPPEUR JAVA 2

    Annexe B : Les mots rservs 979

    Annexe C : Configuration de UltraEdit 981

    UltraEdit n'est pas gratuit ! 983Installation et configuration de UltraEdit 983

    Index 989

  • JAVA VIENT DAVOIR 5 ANS ! C'EST PEU, DANS L'ABSOLU, MAISc'est une ternit l'chelle du dveloppement de l'informatique.Qu'en est-il aujourd'hui des objectifs qui ont prsid son lance- ment ?

    Pourquoi Java ?

    Java devait tre un langage multi-plate-forme qui permettrait, selon leprincipe1 propos par Sun Microsystems, son concepteur, d'crire une

    1. Write once, run everywhere. crire une fois, utiliser partout.

    Introduction

  • XXIV LE DVELOPPEUR JAVA 2

    fois pour toutes des applications capables de fonctionner dans tousles environnements. L'objectif tait de taille, puisqu'il impliquait ladfinition d'une machine virtuelle Java (JVM) sur laquelle les pro-grammes crits devaient fonctionner, ainsi que la ralisation

    1 de cette

    machine virtuelle dans tous les environnements concerns. SunMicrosystems se chargeait par ailleurs de la ralisation d'une machinevirtuelle dans les environnements Solaris et Windows

    2, laissant d'autres

    le soin d'en faire autant pour les autres environnements (et en particu-lier Mac OS, le systme d'exploitation des Macintosh). Afin que lelangage devienne un standard, Sun Microsystems promettait d'en pu-blier les spcifications et de permettre tous d'utiliser gratuitementson compilateur.

    Ds l'annonce de Java, le monde de l'informatique se divisait en qua-tre camps : ceux qui pensaient, pour des raisons varies, que cela nemarcherait jamais, ceux qui pensaient, pour des raisons tout aussi va-ries, qu'il fallait absolument que a marche, ceux qui ne voulaientabsolument pas que cela marche, et ceux qui trouvaient qu'il taiturgent d'attendre pour voir.

    Ceux qui pensaient que a ne marcherait jamais considraient essen-tiellement qu'une machine virtuelle interprtant un langage interm-diaire (appel bytecode) ne serait jamais suffisamment performante. Il

    1. Dans le jargon informatique, la dfinition est souvent appele spcification. De mme,la ralisation dun exemplaire plus ou moins conforme la spcification est appele impl-mentation.

    2. Au mois de dcembre 1998, Sun a annonc le portage du JDK sous Linux, ce qui taitrclam de manire virulente par les adeptes de ce systme, qui ne comprenaient paspourquoi Sun donnait la priorit au dveloppement de la version fonctionnant sous Windows,le systme dexploitation de Microsoft, prsent comme lennemi historique. Ctait mcon-natre la raison conomique. Ce qui a convaincu Sun est plus srement laccroissementsensible du nombre dutilisateurs de Linux que des raisons idologiques. On trouve mainte-nant le J2SDK pour Linux sur le site de Sun, mais toujours avec quelques mois de retard surla version Windows. ce jour (mai 2000), la version disponible est la 1.2.2. Dautres organi-sations produisent des JDK pour Linux. Blackdown.org effectue son propre portage duJ2SDK de Sun, ce qui ne prsente plus gure dintrt maintenant que la version de Sun estdisponible. IBM est galement trs impliqu dans le support de Linux et fournit ce jour sapropre version du JDK 1.1.8. Cette socit est galement la premire proposer une versiond'valuation de son propre J2SDK 1.3.0 disponible en tlchargement sur son site web, l'adresse http://www.alphaworks.ibm.com/tech/linuxjdk/.

  • INTRODUCTION XXV

    faut dire que les exemples prcdents avaient laiss des traces1. D'autres

    considraient qu'il serait impossible d'imposer un standard ouvert dansle monde des PC vou l'hgmonie d'un seul diteur dtenant lequasi-monopole des systmes d'exploitation. Java apparaissait effecti-vement comme une tentative de casser le monopole de Windows. Eneffet, ce monopole reposait (et repose encore !) sur un cercle vicieux :tous les PC (ou presque) doivent utiliser Windows parce que toutesles applications importantes sont dveloppes pour cet environnement.Pour que cela change, il faudrait que les diteurs portent leurs pro-duits sous un environnement diffrent : cela ne serait pas du tout ren-table, puisque trs peu de PC utilisent un autre environnement queWindows. En revanche, une application dveloppe en Java pourraitfonctionner (sans aucune modification, pas mme une recompilation)dans n'importe quel environnement disposant d'une JVM.

    Pour cette raison, un certain nombre d'diteurs et d'utilisateurs vou-laient absolument que cela fonctionne et imaginaient voir l la fin dela domination de Microsoft ! Et chacun de se mettre rver. Un di-teur important (Corel) annona mme qu'il allait rcrire toutes sesapplications en Java. Cette tentative a depuis t abandonne, maisdautres produits commencent tre distribus sous forme de classesJava, excutables sur nimporte quel ordinateur disposant dune ma-chine virtuelle

    2.

    La mme raison entranait Microsoft prendre immdiatement le con-tre-pied de Java en proposant une technologie concurrente. Les con-cepteurs de Windows, en effet, arguaient qu'il tait inefficace et inu-tile de dvelopper des applications pour une machine virtuelle et qu'ilsuffisait de dvelopper une interface commune pouvant tre adaptesous diffrents environnements. Ainsi, les dveloppeurs n'taient pastenus d'utiliser un nouveau langage. Il leur suffisait de programmer enfonction d'une nouvelle interface de programmation : ActiveX. Biensr, cette API ne serait ni ouverte (ce qui permettrait certains de

    1. Pascal UCSD, une version du langage Pascal compil en pseudocode intermdiaire (pCode),qui tait cens tre portable sur tout environnement disposant dun interprteur adquat.

    2. On trouve galement des logiciels spcialiss dans le dploiement dapplications Java quipermettent dinstaller simultanment une application et la JVM ncessaire. Le leader inconstest,dans ce domaine, est InstallShield Java Edition 3.0 (www.installshield.com/java).

  • XXVI LE DVELOPPEUR JAVA 2

    prtendre que Microsoft se rserve des fonctions pour son usage per-sonnel afin d'avantager ses propres applications

    1) ni gratuite.

    La quatrime catgorie d'utilisateurs pensait probablement que les pro-messes de Java taient tout fait allchantes, mais qu'on n'a jamaiscrit des applications avec des promesses, et qu'il fallait donc rester l'coute pour voir ce que cela donnerait.

    La version 1.0 de Java, bien qu'assez rassurante en ce qui concernele problme, essentiel, des performances, confirmait certaines crain-tes dans le domaine de la richesse fonctionnelle. Dune part, si fina-lement la machine virtuelle se rvlait suffisamment rapide pour laplupart des applications, elle restait cependant une solution inappli-cable pour certains types de traitements en temps rel. D'autre part,dans le but d'offrir une interface utilisateur unifie pour tous lesenvironnements, celle-ci tait rduite au plus petit dnominateurcommun, ce que de nombreux dveloppeurs trouvaient notoirementinsuffisant. Ajoutez cela que certaines parties du langage, critespar des quipes de programmation autonomes, prsentaient un lookand feel sensiblement diffrent du reste. Le tableau tait loin d'trenoir, mais il n'tait pas franchement blanc non plus. Le ct positiftait le ralliement gnralis au standard pour ce qui concerne lesapplications diffuses sur Internet. Les deux principaux navigateurs(Netscape Navigator et Internet Explorer) disposaient en effet de JVM(machines virtuelles Java), mme si celles-ci donnaient parfois l'im-pression d'un certain cafouillage. Il faut noter que, dans le cas d'Ex-plorer, le ralliement au langage Java tait tout fait opportuniste,Microsoft continuant promouvoir sa technologie concurrente, touten essayant de dtourner le standard Java en proposant une JVMincomplte, ce qui allait conduire une confrontation avec SunMicrosystems devant les tribunaux amricains.

    Avec l'apparition de la version 1.1 de Java, les choses se compli-quaient quelque peu. En effet, cette version prsentait de nombreu-ses amliorations. On pouvait mme dire qu'il s'agissait de la pre-

    1. Les rcentes prises de position du Dpartment of Justice amricain semblent en partie leurdonner raison !

  • INTRODUCTION XXVII

    mire version rellement utile, mme si certains aspects taient en-core inachevs (en particulier l'interface utilisateur toujours limite).Cependant, le problme le plus grave tait que les utilisateurs quiavaient fond de rels espoirs sur le concept Write once, runeverywhere en taient pour leurs frais. Pour profiter des amliora-tions, une grande partie des programmes devait tre rcrite. L'in-convnient majeur n'tait pas le travail de rcriture. Celui-ci tait eneffet assez limit, de nombreuses modifications n'ayant pour but qued'unifier la terminologie par exemple, la mthode reshape(), per-mettant de modifier la taille et la position d'un composant, devenantsetBounds(). Le rel problme tait que les programmes conformes la version 1.1 ne fonctionnaient pas avec les machines virtuellesJava 1.0, du moins sils utilisaient les nouvelles fonctionnalits.

    Bien sr, on peut arguer de ce que le langage tant encore jeune,Sun Microsystems devait corriger le tir au plus tt, et en tout casavant que les principaux systmes d'exploitation soient livrs en stan-dard avec une machine virtuelle. En effet, dans l'tat actuel du mar-ch, un diteur souhaitant diffuser une application crite en Java nepeut se reposer sur les JVM dj installes. Il lui faut donc distribueren mme temps que son application la JVM correspondante. Dans lecas des PC sous Windows ou sous Linux et des machines fonctionnantsous Solaris, l'environnement Unix de Sun Microsystems, celle-ci estpropose gratuitement par cet diteur sous la forme du J2RE (Java 2Runtime Environment).

    Le problme se complique dans le cas des autres environnements(cas du Macintosh, par exemple) et surtout dans le cas des applica-tions distribues sur Internet (les applets). Pour qu'une appletJava 1.0 puisse tre utilise par un navigateur, il faut que celui-cipossde une JVM, ce qui n'est pas toujours le cas, mais est tout demme assez frquent. En revanche, pour qu'une applet Java 1.1 soitutilisable dans les mmes conditions, il faut que la machine virtuelleJava soit compatible 1.1, ce qui est dj plus rare. Microsoft InternetExplorer dispose d'une telle JVM depuis la version 4.0 et NetscapeNavigator depuis la version 4.05. Cette version prsente toutefois denombreuses incompatibilits, et il est prfrable dutiliser au moins laversion 4.5. Netscape avait annonc le support total de Java 2 dans laversion 5 de son navigateur. Toutefois, celle-ci na jamais vu le jour et

  • XXVIII LE DVELOPPEUR JAVA 2

    Netscape annonce maintenant firement la disponibilit prochaine dela version 6 qui, bien entendu, supportera totalement Java 2. Cette ver-sion devant tre distribue tous les clients dAOL (qui a rcemmentrachet Netscape), on nous promet donc une compatibilit prochainedes navigateurs de la plupart des abonns de ce fournisseur daccs, cequi reprsente une part considrable du march. Toutefois, les kits deconnexion distribus actuellement par AOL contiennent toujours...Micrososft Internet Explorer !

    En ce qui concerne Java 2, il n'existe simplement aucun navigateurcourant capable de faire fonctionner les applets conformes cetteversion. Cela est d'autant plus frustrant qu'elle apporte enfin unesolution satisfaisante certains problmes srieux, comme les limita-tions de l'interface utilisateur.

    Pourquoi, alors, choisir de dvelopper des applications en Java 2.D'une part, parce que cette version permet de rsoudre de faonlgante et productive certains problmes poss par les versions pr-cdentes. D'autre part, parce que l'inconvnient cit prcdemmentne concerne que les applets (diffuses sur Internet), et non les appli-cations (qui peuvent tre diffuses accompagnes de la dernire ver-sion de la machine virtuelle Java)

    1. Enfin, parce que le langage Java

    a maintenant acquis une telle maturit et une telle notorit qu'il nefait nul doute que, dans un dlai trs court, tous les navigateursseront quips d'une machine virtuelle Java 2. En effet, ceux-ci sontconus pour que la JVM puisse tre mise jour de faon simple parl'utilisateur, en tlchargeant la nouvelle version. (Ainsi, la versionMacintosh d'Internet Explorer est livre avec deux JVM diffrentesque l'utilisateur peut slectionner.) Sun Microsystems proposedailleurs gratuitement un plug-in permettant la plupart des naviga-teurs dutiliser la machine virtuelle Java 2. Ce plug-in est inclus dansles versions du J2SDK et du J2RE disponibles sur le CD-ROM accom-pagnant ce livre.

    1. Si vous tes plus particulirement intress par le dveloppement d'applets diffuses surInternet, signalons que le livre Le Dveloppeur Java 2, Mise en uvre et solutions - Les applets,publi chez le mme diteur, est consacr la cration d'applets compatibles avec tous lesnavigateurs bien qu'exploitant en grande partie les avantages de Java 2. Ce livre supposetoutefois une bonne connaissance des principes fondamentaux de Java et ne doit donc treabord qu'aprs l'tude de celui-ci.

  • INTRODUCTION XXIX

    Quest-ce que Java ?

    Java a t dvelopp dans le but d'augmenter la productivit des pro-grammeurs. Pour cela, plusieurs axes ont t suivis.

    Java est un langage orient objetsLes premiers ordinateurs taient programms en langage machine, c'est--dire en utilisant directement les instructions comprises par le pro-cesseur. Ces instructions ne concernaient videmment que les lmentsdu processeur : registres, oprations binaires sur le contenu des regis-tres, manipulation du contenu d'adresses mmoire, branchement desadresses mmoire, etc.

    Le premier langage dvelopp a t l'assembleur, traduisant d'une partmot mot les instructions de la machine sous forme de mnmoniquesplus facilement comprhensibles, et masquant dautre part la com-plexit de certaines oprations en librant le programmeur de l'obli-gation de dcrire chaque opration dans le dtail (par exemple, choi-sir explicitement un mode d'adressage).

    L'assembleur, comme le langage machine, permet d'exprimer tous lesproblmes qu'un ordinateur peut avoir rsoudre. La difficult, pourle programmeur, rside en ce que le programme (la solution du pro-blme) doit tre exprim en termes des lments du processeur (regis-tres, adresses, etc.) plutt qu'en termes des lments du problme lui-mme. Si vous avez programmer un diteur de texte, vous serez bienennuy, car l'assembleur ne connat ni caractres, ni mots, et encoremoins les phrases ou les paragraphes. Il ne permet de manipuler quedes suites plus ou moins longues de chiffres binaires

    1.

    Certains programmeurs pensrent alors qu'il serait plus efficace d'ex-primer les programmes en termes des lments du problme rsou-

    1. Les assembleurs perfectionns permettent nanmoins de manipuler des adresses de blocsmmoire contenant des donnes pouvant tre exprimes dans les listings sources sousforme de chanes de caractres littrales, ce qui simplifie considrablement l'criture et lalecture des programmes.

  • XXX LE DVELOPPEUR JAVA 2

    dre. Les premiers ordinateurs taient utiliss uniquement pour les cal-culs numriques. Aussi, les premiers langages dits de haut niveauexprimaient tous les problmes en termes de calcul numrique. En cequi concerne le droulement des programmes, ces langages reprodui-saient purement et simplement les fonctions des processeurs : tests etbranchements.

    Est rapidement apparue la ncessit de mettre un frein l'anarchie r-gnant au sein des programmes. Les donnes traites par les ordinateurstant en majorit numriques, c'est au droulement des programmesque fut impose une structuration forte. Ainsi, le droulement des pro-grammes devenait (en thorie) plus facilement lisible (et donc ceux-cidevenaient plus faciles entretenir), mais les donnes tait toujoursessentiellement des nombres (mais de diffrents formats) et ventuelle-ment des caractres, voire des chanes de caractres, ou mme des ta-bleaux de nombres ou de chanes, ou encore des fichiers (contenant,bien sr, des nombres ou des chanes de caractres). Le pionnier de ceslangages dits structurs fut Pascal, que sa conception extrmementrigide limitait essentiellement l'enseignement. Le langage C, universel-lement employ par les programmeurs professionnels, marqua l'apogede ce type de programmation.

    Tous les problmes se prsentant un programmeur ne concernent pasforcment des nombres ou des caractres uniquement. Cela parat vi-dent, mais cette vidence tait probablement trop flagrante pour entrerdans le champ de vision des concepteurs de langages, jusqu' l'appari-tion des premiers langages orients objets. Ceux-ci, en commenant parle prcurseur, Smalltalk, permettent d'exprimer la solution en termesdes lments du problme, plutt qu'en termes des outils employs.Cela reprsente un norme pas en avant pour la rsolution de probl-mes complexes, et donc pour la productivit des programmeurs. Biensr, toute mdaille a son revers. En termes de performances pures, rienne vaudra jamais un programme en assembleur. Toutefois, dans le casde projets trs complexes, il est probable que l'criture et surtout lamise au point de programmes en assembleur, voire en langages struc-turs, prendraient un temps tendant vers l'infini.

    Le langage orient objets le plus rpandu est sans quivoque C++. Ils'agit d'une version de C adapte au concept de la programmation

  • INTRODUCTION XXXI

    par objets. Dans ce type de programmation, on ne manipule pas desfonctions et des procdures, mais des objets qui s'changent desmessages. Le principal avantage, outre le fait que l'on peut crer desobjets de toutes natures reprsentant les vritables objets du pro-blme traiter, est que chaque objet peut tre mis au point spar-ment. En effet, une fois que l'on a dfini le type de message auquelun objet doit rpondre, celui-ci peut tre considr comme une botenoire. Peu importe sa nature. Tout ce qu'on lui demande est de secomporter conformment au cahier des charges. Il devient ainsi ex-trmement facile de mettre en uvre un des concepts fondamentauxde la programmation efficace : d'abord crire un programme de fa-on qu'il fonctionne. Ensuite, l'amliorer afin quil atteigne une rapi-dit suffisante.

    Ce concept est particulirement important, sinon le plus important dela programmation oriente objets. En effet, avec les langages des g-nrations prcdentes, cette approche, souvent utilise, conduisait g-nralement une solution mdiocre, voire catastrophique. Il taitd'usage de dvelopper un prototype fonctionnel, c'est--dire un pro-gramme conu rapidement dans le seul but de reproduire le fonction-nement souhait pour le programme final. Les programmeurs les plussrieux utilisaient pour cela un langage de prototypage. Une fois unprototype satisfaisant obtenu, ils rcrivaient le programme dans unlangage plus performant. L'avantage tait qu'ils avaient ainsi lassu-rance de repartir sur des bases saines lors de l'criture de la versionfinale. L'inconvnient tait qu'il fallait faire deux fois le travail, puis-que l'intgralit du programme tait rcrire. De plus, il tait nces-saire de connatre deux langages diffrents, ce qui n'augmentait pas laproductivit.

    Une autre approche consistait dvelopper un prototype dans le mmelangage que la version finale, avec la ferme dcision de rcrire ensuite,de faon propre, les lments qui auraient t mal conus au dpart.Satisfaisante en thorie, cette solution n'tait pratiquement jamais rel-lement applique, la version finale tant presque toujours la versioninitiale agrmente de nombreux repltrages l o il aurait fallu unercriture totale, celle-ci s'avrant impossible en raison des nombreusesconnexions apparues en cours de dveloppement entre des parties ducode qui auraient d rester indpendantes.

  • XXXII LE DVELOPPEUR JAVA 2

    Les langages orients objets, et en particulier Java, apportent une so-lution efficace et lgante ce problme en dfinissant de maniretrs stricte la faon dont les objets communiquent entre eux. Il devientainsi tout fait possible de faire dvelopper les parties d'une applica-tion par des quipes de programmeurs totalement indpendantes. C'estd'ailleurs le cas pour le langage Java lui-mme, comme on peut s'enapercevoir en examinant les noms choisis pour les mthodes des dif-frents objets du langage. Certains sont courts et obscurs, d'autreslongs et explicites, en fonction de la personnalit du programmeur lesayant choisis. (Ces diffrences ont d'ailleurs tendance disparatredans les nouvelles versions du langage, marquant en cela une volontd'unification apprciable.)

    Java est extensible linfiniJava est crit en Java. Idalement, toutes les catgories d'objets (appe-les classes) existant en Java devraient tre dfinies par extension d'autresclasses, en partant de la classe de base la plus gnrale : la classe Object.En ralit, cela n'est pas tout fait possible et certaines classes doiventutiliser des mthodes (nom donn ce que nous considrerons pourl'instant comme des procdures) natives, c'est--dire ralises sous formede sous-programmes crits dans le langage correspondant la machineou au systme sur lequel est excut le programme.

    Le but clairement annonc des concepteurs du langage Java est derduire les mthodes natives au strict minimum. On peut en voir unbon exemple avec les composants Swing, intgrs Java 2. Ceux-ciremplacent les composants d'interface utilisateur (boutons, listesdroulantes, menus, etc.) prsents dans les versions prcdentes etqui faisaient appel des mthodes natives. Les composants Swingsont intgralement crits en Java, ce qui simplifie la programmation etassure une portabilit maximale grce une indpendance totale parrapport au systme. (Il est nanmoins tout fait possible d'obtenir unaspect conforme celui de l'interface du systme utilis. Ainsi, le mmeprogramme tournant sur une machine Unix, sur un PC et sur unMacintosh pourra, au choix du programmeur, disposer d'une interfacestrictement identique ou, au contraire, respecter le look and feel dusystme utilis.)

  • INTRODUCTION XXXIII

    Par ailleurs, Java est extensible l'infini, sans aucune limitation. Pourtendre le langage, il suffit de dvelopper de nouvelles classes. Ainsi,tous les composants crits pour traiter un problme particulier peu-vent tre ajouts au langage et utiliss pour rsoudre de nouveauxproblmes comme s'il s'agissait d'objets standard

    1.

    Java est un langage haute scuritContrairement C++, Java a t dvelopp dans un souci de scuritmaximale. L'ide matresse est qu'un programme comportant des er-reurs ne doit pas pouvoir tre compil. Ainsi, les erreurs ne risquentpas d'chapper au programmeur et de survivre aux procdures de tests.De la mme faon, en dtectant les erreurs la source, on vite qu'ellesse propagent en s'amplifiant.

    Bien sr, il n'est pas possible de dtecter toutes les erreurs au momentde la compilation. Si on cre un tableau de donnes, il est impossibleau compilateur de savoir si l'on ne va pas crire dans le tableau avecun index suprieur la valeur maximale. En C++, une telle situationconduit l'criture des donnes dans une zone de la mmoire n'ap-partenant pas au tableau, ce qui entrane, au mieux, un dysfonction-nement du programme et, au pire (et le plus souvent), un plantagegnralis.

    1. Notez toutefois que certaines classes Java doivent communiquer avec le matriel consti-tuant l'ordinateur sur lequel elles sont utilises. Pour ajouter des classes grant des aspectsmatriels nouveaux, il est souvent ncessaire d'ajouter des mthodes natives. Ainsi, l'enre-gistrement sonore n'est pas possible en Java 2 1.2. Pour crer une classes s'interfaant avecl'entre micro d'un ordinateur, il est indispensable de faire appel une mthode native. Il enest de mme pour toutes les interfaces avec des priphriques non pris en charge par uneversion donne de Java 2, et ce tant que ne sera pas dfini un standard d'interfaage logiciel.Les programmeurs se trouvent donc devant un dilemme : dvelopper leurs propres mtho-des natives, et perdre ainsi la compatibilit avec les autres plates-formes, ou attendre quedes extensions standard soient intgres au langage. C'est le cas, par exemple, de Javasound,une extension permettant de grer la lecture et l'enregistrement d'un grand nombre deformats audio. Cette extension est disponible pour PC et Solaris pour les versions 1.1 et 1.2.Il est peu probable qu'elle soit porte sous cette forme vers d'autres environnements. Enrevanche, elle est intgre au langage partir de la version 1.3. On a alors de bonnes raisonsd'esprer qu'elle devienne rapidement disponible dans tous les environnements.

  • XXXIV LE DVELOPPEUR JAVA 2

    Avec Java, toute tentative d'crire en dehors des limites d'un tableaune conduit simplement qu' l'excution d'une procdure spciale quiarrte le programme. Il n'y a ainsi aucun risque de plantage.

    Un des problmes les plus frquents avec les programmes crits enC++ est la fuite de mmoire. Chaque objet cr utilise de la m-moire. Une fois qu'un objet n'est plus utilis, cette mmoire doit trerendue au systme, ce qui est de la responsabilit du programmeur.Contrairement au dbordement d'un tableau, ou au dbordement dela pile (autre problme vit par Java), la fuite de mmoire, si elleest de faible amplitude, n'empche ni le programme ni le systme defonctionner. C'est pourquoi les programmeurs ne consacrent pas unenergie considrable traquer ce genre de dysfonctionnement. C'estaussi pourquoi les ressources de certains systmes diminuent au furet mesure de leur utilisation. Et voil une des raisons pour lesquel-les vous devez redmarrer votre systme de temps en temps aprs unplantage. (C'est le cas de Windows. Ce n'est pas le cas d'autres syst-mes qui se chargent de faire le mnage une fois que les applicationssont termines. Cependant, mme dans ce cas, les fuites de mmoiredemeurent un problme tant que les applications sont actives.)

    Avec Java, vous n'aurez jamais vous proccuper de restituer la m-moire une fois la vie d'un objet termine. Le garbage collector (littra-lement le ramasseur de dchets) s'en charge. Derrire ce nom bar-bare se cache en effet un programme qui, ds que les ressources m-moire descendent au-dessous d'un certain niveau, permet de rcup-rer la mmoire occupe par les objets qui ne sont plus utiles. Un soucide moins pour le programmeur et surtout un risque de bug qui dispa-rat. Bien sr, l encore, il y a un prix payer. Vous ne savez jamaisquand le garbage collector s'excutera. Dans le cas de contrle deprocessus en temps rel, cela peut poser un problme. (Il existe ce-pendant d'ores et dj des versions de Java dans lesquelles le fonc-tionnement du garbage collector est contrlable, mais cela sort ducadre de ce livre.)

    Java est un langage simple apprendreJava est un langage relativement simple apprendre et lire. Beau-coup plus, en tout cas, que C++. Certains lecteurs nous ont demand

  • INTRODUCTION XXXV

    s'il tait raisonnable d'entreprendre l'apprentissage de Java alors qu'ilsn'avaient aucune exprience d'un autre langage. Non seulement la r-ponse est oui, mais c'est mme la situation idale. En effet, il est prf-rable d'aborder Java avec un regard neuf. Nombreux sont les program-meurs rompus aux subtilits de C++ qui veulent s'essayer la program-mation en Java. Ils rencontrent souvent de srieux problmes car ilstentent simplement de reproduire les programmes C++ en les traduisantmot mot. Les questions qu'ils posent le plus souvent sont : "Commentgre-t-on les pointeurs en Java ?" ou "Comment peut-on allouer un blocde mmoire ?" La rponse est simplement : "On ne le fait pas !", ce quia pour effet de les dstabiliser compltement. L'analogie avec les lan-gues naturelles est frappante. Un Franais apprenant une langue exoti-que est souvent drout lorsqu'il pose la question "Comment dit-onOui ?" et qu'il s'entend rpondre "On ne le dit pas !"

    1 Il faut en gnral

    quelque temps pour admettre que l'on puisse trs bien se passer de cemot qui nous parat pourtant essentiel.

    Cette simplicit a aussi un prix. Les concepts les plus complexes (etaussi les plus dangereux) de C++ ont t simplement limins. Est-ce dire que Java est moins efficace ? Pas vraiment. Tout ce qui peut trefait en C++ (sauf certaines erreurs graves de programmation) peut l'treen Java. Il faut seulement parfois utiliser des outils diffrents, plussimples manipuler, et pas forcment moins performants.

    Contrairement d'autres langages, la simplicit de Java est en faitdirectement lie la simplicit du problme rsoudre. Ainsi, un pro-blme de dfinition de l'interface utilisateur peut tre un vritablecasse-tte avec certains langages. Avec Java, crer des fentres, desboutons et des menus est toujours d'une simplicit extrme, ce quilaisse au programmeur la possibilit de se concentrer sur le vritableproblme qu'il a rsoudre. Bien sr, avec d'autres langages, il estpossible d'utiliser des bibliothques de fonctions ou de procdurespour traiter les problmes d'intendance. L'inconvnient est double.Tout d'abord, ces bibliothques ne sont pas forcment crites dans lelangage utilis et, si elles le sont, elles ne sont gnralement pas dis-ponibles sous forme de sources, ce qui est facilement comprhensi-

    1. Il n'est nullement besoin d'aller chercher au fin fond de l'Amazonie ou sur une le perduedu Pacifique pour trouver un tel exemple. C'est le cas, par exemple, en finnois.

  • XXXVI LE DVELOPPEUR JAVA 2

    ble, les programmeurs prfrant prserver leurs produits des regardsindiscrets. Il en rsulte que les programmes utilisant ces bibliothquesne sont pas portables dans un autre environnement. De plus, si ellessont disponibles dans les diffrents environnements pour lesquels vousdveloppez, rien ne dit qu'elles le seront encore demain. Avec Java,pratiquement tout ce dont vous avez besoin est inclus dans le lan-gage, ce qui, outre le problme de portabilit, rsout galement celuidu cot. (Certaines bibliothques cotent fort cher.) De plus, si vousavez quand mme besoin d'acqurir une bibliothque de classes, ilvous suffit d'en slectionner une conforme au label Pure Java, cequi vous assure qu'elle sera portable dans tous les environnementscompatibles Java, prsents ou venir, et ce au niveau excutable, cequi garantit la prennit de votre investissement.

    Java est un langage compilJava est un langage compil, c'est--dire qu'avant d'tre excut, ildoit tre traduit dans le langage de la machine sur laquelle il doitfonctionner. Cependant, contrairement de nombreux compilateurs,le compilateur Java traduit le code source dans le langage d'une ma-chine virtuelle, appele JVM (Java Virtual Machine). Le code produit,appel bytecode, ne peut pas tre excut directement par le proces-seur de votre ordinateur. (Cependant, rien n'interdit de fabriquer unprocesseur qui excuterait directement le bytecode Java.) Le bytecodepeut ensuite tre confi un interprteur, qui le lit et l'excute. Enprincipe, l'interprtation du bytecode est un processus plus lent quel'excution d'un programme compil dans le langage du processeur.Cependant, dans la plupart des cas, la diffrence est relativement mi-nime. Elle pose toutefois un problme pour les applications dont lavitesse d'excution est un lment critique, et en particulier pour lesapplications temps rel ncessitant de nombreux calculs comme lasimulation 3D anime. Il existe cela plusieurs solutions.

    Les compilateurs natifsUne des solutions consiste utiliser un compilateur natif, traduisantdirectement le langage Java en un programme excutable par le pro-cesseur de la machine. Le programme ainsi produit n'est plus portable

  • INTRODUCTION XXXVII

    dans un environnement diffrent. Cependant le programme source resteportable en thorie, du moment qu'il existe galement un compilateurnatif dans les autres environnements. Cette solution prsente toutefoisdeux inconvnients.

    Le premier est que, le code produit par le compilateur n'tant plusportable, il faut distribuer autant de versions diffrentes de l'applica-tion qu'il y a de systmes cibles. En clair, si l'application doit tournersur PC et sur Macintosh, il faudra que le support employ pour ladistribution (par exemple un CD-ROM) contienne les deux versions.

    Le second inconvnient n'est pas inhrent l'utilisation d'un compila-teur natif, mais il est beaucoup plus grave. En effet, il est tentant pourle concepteur du compilateur, de se simplifier la tche en demandant l'utilisateur d'apporter quelques lgres modifications son pro-gramme. Dans ce cas, c'est tout simplement la portabilit des sourcesqui est remise en cause. Donc, avant de vous dcider choisir uncompilateur natif, vrifiez s'il est compatible avec un programme PureJava sans aucune modification.

    Les compilateurs de bytecode

    Une autre approche, pour amliorer la vitesse d'excution des pro-grammes Java, consiste compiler le bytecode dans le langage duprocesseur de la machine cible. De cette faon, la portabilit est pr-serve jusqu'au niveau du bytecode, ce qui peut tre suffisant dansbien des cas. Il reste alors assurer la diffusion du code compil enautant de versions qu'il y a de systmes cibles. Cette approche estsatisfaisante pour la diffusion d'applications vers des systmes ciblesconnus. En particulier, la diffusion sur support physique (CD-ROM,par exemple) se prte bien ce type de traitement. En effet, choisir unsupport physique implique gnralement de connatre le systme ci-ble, car il faut s'tre assur que celui-ci est bien capable de lire lesupport physique. Ainsi, la diffusion d'une application pour PC etMacintosh implique d'utiliser un format de CD-ROM hybride pouvanttre lu dans ces deux environnements. Si un compilateur de bytecodeexiste pour chacun d'eux, cela peut constituer une solution satisfai-sante. Il peut s'agir d'un mme compilateur, fonctionnant dans l'undes environnements, ou mme dans un environnement totalement dif-frent, et produisant du code natif pour l'environnement cible. On

  • XXXVIII LE DVELOPPEUR JAVA 2

    parle alors de cross-compilation. Un compilateur fonctionnant sur PCpeut ainsi produire du code natif PC et Macintosh, au choix de l'utili-sateur. Ce type de solution est cependant trs rare, les cross-compila-teurs servant le plus souvent produire du code natif pour des machi-nes ne disposant pas de systme de dveloppement propre (consolesde jeu, par exemple).

    Les compilateurs JIT

    La solution prcdente prsente un inconvnient majeur si l'ensembledes environnements cibles n'est pas connu. Par exemple, si vous crezune application devant tre diffuse sur Internet, vous souhaiterezque celle-ci fonctionne sur tous les environnements compatibles Java,prsents et venir. La compilation du bytecode la source (par leprogrammeur) n'est pas, dans ce cas, une solution envisageable. Lescompilateurs JIT (Just In Time) sont supposs rsoudre ce problme.Un compilateur JIT fonctionne sur la machine de l'utilisateur. Il com-pile le bytecode la vole, d'o l'appellation Just In Time Juste temps. Gnralement, l'utilisateur peut choisir d'activer ou non le com-pilateur JIT. Lorsque celui-ci est inactif, le programme est excut parl'interprteur. Dans le cas contraire, le programme en bytecode estcompil dans le langage du processeur de la machine hte, puis ex-cut directement par celui-ci. Le gain de temps d'excution est vi-demment rduit en partie en raison du temps ncessaire la compila-tion. Pour un programme s'excutant de faon totalement indpen-dante de l'utilisateur, le gain peut tre nul. En revanche, pour un pro-gramme interactif, c'est--dire attendant les actions de l'utilisateur poureffectuer diverses oprations, le gain peut tre substantiel, car le com-pilateur peut fonctionner pendant que l'utilisateur consulte l'affichage.Pour un gain maximal, il faut cependant que le programme soit conude telle faon qu'il soit charg dans sa totalit ds le dbut de l'utilisa-tion afin de pouvoir tre compil en arrire-plan. En effet, Java estconu pour que les classes ncessaires au fonctionnement du pro-gramme soient charges selon les besoins, afin que seules celles quiseront rellement utilises soient transmises, cela, bien sr, afin d'op-timiser les temps de chargement sur Internet. En revanche, pour bn-ficier au maximum des avantages d'un compilateur JIT, il faut autantque possible tlcharger les classes l'avance afin qu'elles soient com-

  • INTRODUCTION XXXIX

    piles, et cela sans savoir si elles seront rellement utilises. L'usaged'un compilateur JIT lorsque les classes sont tlcharges la de-mande se traduit le plus souvent par un faible gain de vitesse, voireparfois un ralentissement de l'excution.

    La technologie HotSpot

    La technologie HotSpot a t dveloppe par Sun Microsystems pourpalier les inconvnients des compilateurs JIT. Le principe d'un compi-lateur JIT peut tre rsum de la faon suivante : "perdre un peu detemps pour en gagner beaucoup". En effet, la compilation prend dutemps, mais cette perte de temps doit pouvoir permettre d'en gagnergrce une vitesse d'excution suprieure du code compil. Toute-fois, ce gain de temps dpend de deux lments : la nature du code etles techniques de compilation employes. Si on suppose qu'une m-thode est interprte en une seconde et compile en deux secondes,et si l'excution du code compil prend une demi-seconde on cons-tate que le gain n'est rel que si la mthode est excute au moinstrois fois. (Les temps indiqus ici sont purement fantaisistes. Il s'agituniquement de faire comprendre le principe.) Ainsi, un compilateurJIT perd beaucoup de temps compiler des mthodes qui ne serontexcutes qu'une seule fois. La technologie HotSpot permet de mini-miser cet inconvnient grce une approche "intelligente" de la com-pilation. Intgre la version 1.3 (et disponible sparment pour laversion 1.2), cette technologie semble trs prometteuse. Il faut toute-fois bien comprendre que le gain de performance qu'il est ainsi possi-ble d'obtenir dpend troitement du type de programme et du typed'optimisation mis en uvre, et surtout de l'adquation entre les deux.Une application bureautique individuelle impose de ce point de vuedes contraintes totalement diffrentes de celles qui psent sur un ser-veur. Qui plus est, les contraintes lies l'optimisation d'un serveurdpendent essentiellement du nombre de requtes qui doivent treservies simultanment. Ainsi, il n'est pas rare de voir des serveurscommerciaux prsenter des performances trs sduisantes pour quel-ques centaines d'accs et s'crouler lamentablement au-del d'un cer-tain seuil. Il est toujours prfrable d'avoir des performances infrieu-res mais proportionnelles la charge impose au programme. Ce pro-blme est connu des programmeurs sous le terme anglo-saxon de

  • XL LE DVELOPPEUR JAVA 2

    scalability, qui dsigne la facult pour un programme de conserverdes performances proportionnelles la charge qui lui est impose. Ils'agit l d'un problme essentiel en ce qui concerne la programmationdes serveurs1.

    Pour cette raison, il est inutile de tester la technologie HotSpot avec unprogramme spcifiquement tudi pour ce type de test. Il est aussi fa-cile d'crire un programme dmontrant l'crasante supriorit de cettetechnologie, que de faire le contraire, c'est--dire crire un programmefonctionnant beaucoup plus vite avec un simple interprteur qu'avecn'importe quelle technique d'optimisation. Java 1.3 reprsente une netteavance en termes de performances en ce qui concerne les applicationsrelles, tant pour la vitesse d'excution que pour l'empreinte mmoire,c'est--dire l'espace occup en mmoire par le programme pendant sonexcution.

    Le premier langage du troisime millnaire?

    Java s'annonce comme une des volutions majeures de la programma-tion. Pour la premire fois, un langage efficace, performant, standard etfacile apprendre (et, de plus, gratuit) est disponible. Il satisfait auxbesoins de l'immense majorit des dveloppeurs et reprsente une op-portunit de se librer un peu de la tour de Babel des langages actuels(ainsi que de la domination de certains monopoles). Pour que Java soitun succs, il faut qu'il soit ds aujourd'hui appris comme premier lan-gage de programmation par les programmeurs en cours de formation ;c'est dans cet esprit que ce livre a t conu, non pas pour s'adresseraux programmeurs rompus aux secrets de C++, qui ont plutt besoin

    1. Ce critre n'est pas le seul prendre en compte. En effet, un serveur prsente la particu-larit de fonctionner en permanence, contrairement une application bureautique, quifonctionne au maximum pendant quelques heures avant d'tre quitte. Un serveur doit doncoffrir des performances constantes dans le temps. Si un tel programme prsente des fuitesde mmoire, celles-ci s'accumulent au point de provoquer parfois un plantage ncessitant leredmarrage du systme. Toutefois, avant d'en arriver l, on observe gnralement unenette dgradation des performances, due au morcellement de la mmoire et la diminutiondes ressources disponibles. Java est vraiment le langage qui permet au mieux d'viter cegenre de problmes.

  • INTRODUCTION XLI

    d'un manuel de rfrence et d'une description des diffrences entre cesdeux langages, mais ceux qui veulent s'imprgner directement desconcepts fondamentaux de Java. Tout comme on ne matrise pas unelangue trangre en traduisant sa pense depuis sa langue maternelle, iln'est pas efficace d'essayer de traduire en Java des programmes labo-rs dans un autre langage. Pour que Java devienne le premier langagedu troisime millnaire, il faut qu'apparaisse une gnration de pro-grammeurs pensant directement en Java. Puissions-nous y contribuermodestement.

    Voir Java luvre

    Si vous souhaitez voir Java luvre en situation relle, vous pouvezvisiter le site de Volga Multimdia, ladresse http://www.volga.fr/. Vousy trouverez Codexpert, une applet proposant un test du Code de laRoute simulant lexamen thorique du permis de conduire, qui vousmontrera un exemple de ce que Java permet de raliser. La Figure I.1montre laffichage de Codexpert. Vous pouvez galement trouver uneversion plus perfectionne l'adresse http://www.volga.fr/beta. Cetteversion comporte un dcodeur de fichiers audio au format GSM permet-tant le streaming (c'est--dire l'coute sans chargement pralable) avecun liaison 14 Kbps. Ce dcodeur est crit entirement en Java. Cetteapplet implmente par ailleurs en Java 1.0 (compatible avec tous lesnavigateurs) le modle de gestion des vnements de Java 1.3. Si vousvoulez savoir comment tout cela fonctionne, vous pouvez mme vousprocurer le listing source ainsi qu'une description dtaille dans la suitede ce livre, publie chez le mme diteur sous le titre Le DveloppeurJava 2 - Mise en uvre et solutions - Les applets. (Voir page XLII.)

    Support technique

    Si vous rencontrez des problmes lors de la compilation ou de lexcu-tion des programmes de ce livre, vous pouvez consulter le site Web quilui est consacr, ladresse http://www.volga.fr/java2. Nous y diffuseronsles rponses aux questions les plus frquemment poses. Si vous ne trou-

  • XLII LE DVELOPPEUR JAVA 2

    vez pas l la solution vos problmes, vous pouvez nous contacter ladresse [email protected]. Nous rpondrons toutes les questionsconcernant ce livre. Quant aux problmes concernant Java en gnral,nous essaierons dy rpondre dans la mesure du temps disponible.

    Toutefois, avant de nous contacter, veuillez prendre en considrationles points suivants :

    La plupart des problmes rencontrs par les utilisateurs concernentla compilation et l'excution des programmes et sont dus unemauvaise configuration de la variable d'environnement classpathou un non-respect des majuscules dans les noms des fichiers.

    Figure I.1 : Exemple dapplet Java : Codexpert, le test du Code de la Route.

  • INTRODUCTION XLIII

    Aussi, joignez toujours votre envoi une copie de votre fichier deconfiguration (autoexec.bat sous MS-DOS).

    Envoyez-nous une copie du programme posant problme en picejointe, et non en copiant son contenu dans votre courrier lectro-nique.

    Si la compilation ou l'excution partir d'un environnement deprogrammation comme UltraEdit produisent un message d'erreur,essayez de compiler ou d'excuter le programme partir de la li-gne de commande, dans une fentre console (fentre MS-DOS sousWindows).

    Si l'erreur persiste, faites une copie d'cran du message d'erreur enincluant la ligne de commande qui l'a provoque et collez-ladans votre courrier. Pour faire une copie d'cran dans une fentreMS-DOS sous Windows, procdez de la faon suivante :

    1. Cliquez sur le bouton Marquer, dans la barre d'outils :

    2. Slectionnez la zone copier, en incluant la ligne de commande :

  • XLIV LE DVELOPPEUR JAVA 2

    3. Cliquez sur le bouton Copier pour placer une copie du mes-sage, sous forme de texte, dans le presse-papiers :

    4. Collez le contenu du presse-papiers dans votre message.

    Aller plus loin

    Contrairement dautres auteurs, nous nous sommes attachs expo-ser dans ce livre les concepts fondamentaux de Java et de la program-mation oriente objets. Vous ny trouverez donc que peu de recettesapplicables sans quil soit ncessaire de comprendre les mcanismessous-jacents. La pagination limite (plus de 1 000 pages tout de mme !)ne nous a pas permis de traiter la mise en uvre en situation relledes concepts abords, ni de dtailler les points les plus spcifiques. Sivous souhaitez aller plus loin, nous vous suggrons de vous reporterau second volume de la srie Le Dveloppeur Java 2, intitul Mise enuvre et solutions - Les applets. Dans ce volume, nous laisserons dect la thorie pour analyser des applications relles et exposer lafaon dont les principes de la programmation objet et de Java sontexploits dans des situations concrtes. Les points suivants (entre autres)y sont abords :

    Stratgie du dploiement dapplets sur le Web : comment concevoirdes applets afin quelles soient utilisables par le plus grand nombrepossible de navigateurs, prsents et venir.

  • INTRODUCTION XLV

    Optimisation du chargement des applets : comment tirer le meilleurparti possible de Java pour rduire au minimum les temps de char-gement, rels et apparents.

    Le traitement des images : techniques doptimisation pour la mani-pulation des images dans le cas des applets diffuses sur Internet.

    Cration de composants personnaliss ultra-lgers : comment obte-nir le look & feel de votre choix (Metal, par exemple) dans vosapplets, y compris dans les navigateurs qui ne sont compatiblesquavec Java 1.0.

    Utilisation des threads pour grer la mise en cache des images surle Web : comment rendre le chargement des images instantan.

    Le traitement du son : lAPI standard des versions de Java disponi-bles avec la plupart des navigateurs est trs pauvre en ce qui con-cerne le son. Il est pourtant possible de raliser des choses aussicomplexes que la synthse du son en Java, sans laide daucunebibliothque supplmentaire.

    Le streaming : comment utiliser des donnes au fur et mesure deleur transmission ; application au streaming audio.

    Utilisation des classes Sun : ces classes non standard offrent denombreuses possibilits supplmentaires. Pourquoi sen priver !

    Pierre-Yves Saumont et Antoine Mirecourt, Paris, mai 2000

    Note de lditeur

    Vous pouvez commander Le Dveloppeur Java 2, Mise en uvre et solu-tions - Les Applets chez votre libraire habituel ou, dfaut, sur le site desditions OEM, ladresse http://www.oemweb.com ou encore sur le sitede la librairie Eyrolles, l'adresse http://www.librairie-eyrolles.com.

    Attention : Le livre Le Dveloppeur Java 2, Mise en uvre et solutions -Les Applets est bas sur les connaissances dveloppes dans le prsentvolume. Il est donc conseill de ne laborder quaprs avoir tudi celui-ci.

  • CRIRE DES PROGRAMMES EN JAVA NCESSITE QUE VOUS DISPO-siez d'un certain nombre d'outils. Bien entendu, il vous faut unordinateur quip d'un disque dur et d'une quantit de mmoiresuffisante, ainsi que d'un systme d'exploitation. Vous pouvez utilisern'importe quel ordinateur, condition que vous soyez en mesure detrouver le logiciel indispensable. Sun Microsystems diffuse gratuitementle compilateur et les autres outils ncessaires pour les environnementsWindows, Linux et Solaris. En revanche, si vous utilisez un Macintosh, ilvous faudra vous procurer les outils ncessaires auprs d'un autre four-nisseur. Dans ce premier chapitre, nous supposerons que vous disposezd'un PC sous Windows 98. Les manipulations effectuer sont cepen-dant pratiquement identiques dans le cas des autres environnements.

    1Installationde Java

    Chapitre 1 : Installation de Java

  • 2 LE DVELOPPEUR JAVA 2

    L'criture des programmes, elle, est strictement identique. En revanche,la faon de les excuter est diffrente sur un Macintosh, car son systmed'exploitation (Mac OS) ne dispose pas d'un mode ligne de commande.Vous devez donc utiliser un environnement de programmation qui four-nisse une fentre de commande dans laquelle vous pourrez taper lescommandes ncessaires.

    Sun Microsystems diffuse sur son site Web les dernires versions de seslogiciels. Les trois plus importants sont :

    Le J2SDK1 (Java 2 Software Development Kit), qui contient javac, lecompilateur qui transforme votre programme source en bytecode,java, le programme permettant l'excution du bytecode constituantles applications, l'AppletViewer, pour excuter les applets, javadoc,un programme permettant de crer automatiquement la documen-tation de vos programmes au format HTML, et d'autres utilitaires2.

    La documentation, qui contient la liste de toutes les classes Java.Cette documentation est absolument indispensable au programmeur.Elle est au format HTML et doit tre consulte l'aide d'un naviga-teur.

    Le J2RE (Java 2 Runtime Environment), qui contient tout ce qui estncessaire pour diffuser vos applications aux utilisateurs.

    Pour tre certain de disposer des dernires versions, vous pouvez vousconnecter l'adresse :

    http://java.sun.com/

    1. Jusqu' la version 1.2, le J2SDK tait nomm JDK (Java Development Kit). De trs nom-breux programmeurs (y compris chez Sun Microsystems) continuent d'utiliser cette dnomi-nation. De la mme faon, le J2RE tait nomm simplement JRE.

    2. Il existe deux versions du J2SDK, appeles respectivement J2SE (Java 2 Standard Edition)et J2EE (Java 2 Enterprise Edition). La seconde est une extension de la premire qui contienttdes lments logiciels supplmentaires tels que le kit de dveloppement des Java Beans.Dans ce livre, nous ne parlerons que de J2SE.

  • CHAPITRE 1 INSTALLATION DE JAVA 3

    et tlcharger ces trois lments (ainsi que bien d'autres !). Cependant,tant donn le volume de donnes que cela reprsente (30 Mo pour leJ2SDK, 22 Mo pour la documentation, 5 Mo pour le J2RE en versionamricaine et 7 Mo pour la version internationnale), le tlchargementpeut durer plusieurs heures. Aussi, nous avons inclus le J2SDK, sa docu-mentation et le J2RE sur le CD-ROM accompagnant ce livre. Si voussouhaitez vrifier qu'il s'agit bien de la dernire version, connectez-vous l'adresse indique la page prcdente. De toute faon, les versionsfournies sur le CD-ROM sont suffisantes pour tous les exemples du livre.Le J2SDK et le J2RE figurant sur le CD-ROM portent le numro de ver-sion 1.3.0. Java a pris la dnomination Java 2 partir de la version 1.2.0.

    Configuration ncessaire

    Pour utiliser Java et le J2SDK, vous devez disposer d'une configurationsuffisante. Nous dcrirons ici la configuration minimale pour les utilisateursdisposant d'un PC sous Windows.

    OrdinateurSur PC, Java 2, dans sa version 1.3, ncessite un PC quip au moins d'unprocesseur Pentium Intel fonctionnant 166 MHz. Il va de soi qu'il s'agit d'unminimum et qu'il est souhaitable de disposer au moins d'un processeur deuxfois plus rapide. Le temps de dveloppement s'en ressentira, surtout si vouscompilez de grosses applications. Pour ce qui est de l'excution des program-mes, vous devez, si possible, disposer d'une machine correspondant la con-figuration minimale sur laquelle votre application doit fonctionner. Vous serezainsi en mesure de tester votre application dans les conditions relles, ce quivitera de mauvaises surprises vos utilisateurs. Le fonctionnement avec desprocesseurs compatibles est possible mais n'est pas garanti par Sun.

    SystmeLe J2SDK 1.3 est compatible avec les systmes d'exploitation Windows 95,Window 98, Windows NT 4.0 et Windows 2000. (Il existe des versions pour

  • 4 LE DVELOPPEUR JAVA 2

    les PC fonctionnant sous d'autres systmes, tel Linux.) L'utilisation d'unsystme d'exploitation 16 bits (Windows 3.1) est exclue.

    MmoireVous devez disposer d'un minimum de 32 Mo de mmoire RAM pour fairefonctionner des applications fentres. L'utilisation d'applets dans un navi-gateur quip du plug-in Java ncessite 48 Mo. Une quantit de mmoireplus importante peut tre ncessaire pour certaines applications lourdes.On constate gnralement une forte diminution des performances en des-sous de ces limites.

    DisqueL'installation du J2SDK ncessite un espace libre de 65 Mo sur le disquedur. Pour une installation complte de la documentation, vous devez dis-poser de 120 Mo supplmentaires.

    Installation du J2SDK

    Pour installer le J2SDK, vrifiez tout d'abord que vous disposez, sur votredisque dur, d'un espace suffisant. Il faut 52 Mo pour une installation com-plte et 27 Mo pour une installation minimale. Toutefois, le processus d'ins-tallation utilise un certain nombre de fichiers temporaires. Pour une instal-lation complte, l'espace utilis pendant l'installation monte jusqu' 65 Mo.Si vous souhaitez ajouter la documentation (ce qui est tout fait indispen-sable), vous devez disposer de 120 Mo supplmentaires. Pour lancer l'ex-cution du J2SDK, excutez le programme :

    j2sdk1_3_0-win.exe

    se trouvant dans le dossier Java2 sur le CD-ROM. Suivez les instructionsaffiches. Le programme vous demande tout d'abord d'indiquer un dos-

  • CHAPITRE 1 INSTALLATION DE JAVA 5

    sier d'installation (Figure 1.1). Il est fortement conseill d'accepter ledossier propos (c:\jdk1.3)1. Cela n'a techniquement aucune impor-tance, mais facilite la dtection des erreurs en cas de problme.

    Lorsque le programme vous demande quels sont les composants quevous souhaitez installer, cochez ceux qui vous intressent, dcochez lesautres (Figure 1.2). L'option Old Native Interface Header Files n'est abso-lument pas ncessaire. Les options Demos et Java Sources sont trs int-ressantes si vous disposez d'un espace suffisant sur votre disque dur.(Les dmos occupent prs de 5 Mo et les sources environ 20 Mo.) Il esttrs instructif d'examiner les programmes de dmonstration afin de voircomment les problmes y sont rsolus. Quant aux sources de Java (critesen Java), leur tude est la meilleure faon de se familiariser avec les aspectsles plus intimes du langage, mais cela demande toutefois d'avoir dj debonnes notions de base !

    Figure 1.1 : Choix dun dossier dinstallation.

    1. Malgr tous les efforts faits par Sun Microsystems depuis la version 1.2 pour imposer lanouvelle dnomination (J2SDK), on voit ici qu'il reste encore du travail accomplir. Lerpertoire d'installation par dfaut devrait, logiquement, tre c:\j2sdk1.3.

  • 6 LE DVELOPPEUR JAVA 2

    Figure 1.2 : Les options dinstallation.

    Le programme d'installation place les fichiers dans le dossier jdk1.3, survotre disque dur. Une fois l'installation termine, le programme configurel'environnement pour le J2RE (qui est automatiquement install en mmetemps que le J2SDK), puis vous propose de consulter un fichier(README.txt) contenant diverses informations concernant cette versiondu J2SDK (Figure 1.3). Vous pouvez vous dispenser de le faire, une ver-sion HTML de ce document se trouvant dans le rpertoire d'installationdu J2SDK. Outre qu'elle est beaucoup plus agrable consulter, ellecontient de nombreux liens actifs vers les lments de la documentationet vers des pages du site Web de Sun Microsystems. Vous pourrez consul-ter ce document plus tard l'aide de votre navigateur.

    Le J2SDK est l'ensemble minimal que vous devez installer pour compileret excuter des programmes Java. Cependant, avant de pouvoir utiliserle compilateur, il est ncessaire de configurer l'environnement, commenous le verrons dans une prochaine section. Il est galement quasimentindispensable d'installer la documentation en ligne, ce que nous feronsbientt.

  • CHAPITRE 1 INSTALLATION DE JAVA 7

    Ce que contient le J2SDKA l'installation, le J2SDK est plac dans un dossier qui comporte plusieurssous-dossiers. Dans la version actuelle, ce dossier est nomm jdk1.3. Voustrouverez ci-aprs une description succincte du contenu de chacun de cessous-dossiers, avec quelques commentaires.

    jdk1.3\bin

    Ce dossier contient essentiellement les fichiers excutables du J2SDK, c'est--dire :

    java.exe

    Le lanceur d'applications. C'est lui qui permet d'excuter les program-mes que vous crivez. java.exe est trs souvent appel l'interprteurJava. Il s'agit d'un abus de langage. Les programmes Java sont compi-ls, c'est--dire traduits dans un langage particulier, appel bytecode,

    Figure 1.3 : Affichage du fichier README.txt.

  • 8 LE DVELOPPEUR JAVA 2

    qui est le langage de la machine virtuelle Java (JVM). C'est la solutionchoisie par les concepteurs de ce langage pour que les programmessoient portables d'un environnement un autre. Chaque environne-ment compatible Java possde une JVM capable d'excuter le bytecode.Le bytecode peut tre excut de plusieurs faons. Il peut tre traduitdans le langage du processeur rel quipant l'ordinateur. C'est ce quefait un compilateur JIT. Il peut galement tre interprt par un pro-gramme appel interprteur. Jusqu' la version 1.1, l'implmentationde Sun Microsystems ne comportait qu'un interprteur. C'est pourquoil'habitude a t prise de parler de l'interprteur Java. La version 1.2comportait la fois un compilateur JIT et un interprteur. Par dfaut,l'excution des programmes tait effectue l'aide de ce compilateur1.La version 1.3 fait appel un programme trs sophistiqu permettantl'optimisation de l'excution du bytecode grce la technologie HotSpot.(Pour plus de dtails, voir l'Introduction.) Le programme java.exe n'esten fait qu'un lanceur qui charge le bytecode en mmoire et dclen-che l'excution d'un interprteur ou d'un compilateur, selon la configu-ration. Nous continuerons toutefois, conformment l'usage tabli, dedsigner l'ensemble par le terme d'interprteur Java.2

    javac.exe

    Le compilateur Java. Il permet de traduire vos programmes Java enbytecode excutable par l'interprteur.

    appletviewer.exe

    Ce programme permet de tester les applets Java, prvues pour treintgres dans des pages HTML.

    jdb.exe

    Le dbogueur Java. Il facilite la mise au point des programmes grce de nombreuses options permettant de surveiller leur excution. Ilest cependant beaucoup plus facile utiliser lorsqu'il est intgr unIDE (Integrated Development Environment).

    1. En fait, la version 1.1 comportait galement un compilateur JIT, mais celui-ci tait inactifpar dfaut.

    2. Les lanceurs java.exe et javaw.exe sont galement installs dans le rpertoire c:\windows.Pour plus de dtails, reportez-vous la section consacre l'installation du J2RE, page 27.

  • CHAPITRE 1 INSTALLATION DE JAVA 9

    javap.exe

    Ce programme dsassemble les fichiers compils et permet donc d'exa-miner le bytecode.

    javadoc.exe

    Javadoc est un utilitaire capable de gnrer automatiquement la docu-mentation de vos programmes. Attention, il ne s'agit pas de la documen-tation destine aux utilisateurs finaux ! Ce programme est prvu pourdocumenter les bibliothques de classes qui sont destines tre utili-ses par les programmeurs. L'ensemble de la documentation de Java at ralise l'aide de cet utilitaire, qui produit un rsultat sous forme depages HTML. Si vous dveloppez des classes Java devant tre employespar d'autres programmeurs, cet outil vous sera indispensable.

    javah.exe

    Ce programme permet de lier des programmes Java avec des mtho-des natives, crites dans un autre langage et dpendant du systme.(Ce type de programme n'est pas portable.)

    jar.exe

    Un utilitaire permettant de compresser les classes Java ainsi que tousles fichiers ncessaires l'excution d'un programme (graphiques,sons, etc.). Il permet en particulier d'optimiser le chargement desapplets sur Internet.

    jarsigner.exe

    Un utilitaire permettant de signer les fichiers archives produits parjar.exe, ainsi que de vrifier les signatures. C'est un lment impor-tant de la scurit, et galement de l'efficacit. Nous verrons en effetque l'utilisation d'applets signes (dont on peut identifier l'auteur)permet de se dbarrasser des contraintes et limitations trs restrictivesimposes ce type de programme.

    Le dossier bin contient encore une foule d'autres choses dont nous ne nousproccuperons pas pour le moment.

  • 10 LE DVELOPPEUR JAVA 2

    jdk1.2/demo

    Ce dossier comporte quatre sous-dossiers :

    applets

    Le dossier applets contient un ensemble de programmes de dmons-tration sous forme d'applets. Chaque exemple comprend le fichier source(.java), le fichier compil (.class) et un fichier HTML permettant defaire fonctionner l'applet dans un navigateur. Certains exemples com-portent galement des donnes telles que sons ou images.

    Ces exemples sont intressants pour avoir un aperu des possibilitsoffertes par Java, en particulier dans le domaine graphique.

    jfc

    Les exemples figurant dans le dossier jfc concernent essentiellementles nouveaux composants Swing de l'interface utilisateur. Si vous voulezen avoir un catalogue complet, excutez le programme SwingSet2.Ceux qui connaissaient la version prcdente (SwingSet, livre avecJava 1.2) pourront constater les immenses progrs en ce qui concernela vitesse d'excution. Pour les autres, essayez le programmeMetalworks. Lancez ce programme (en faisant un double clic sur l'icnedu fichier Metalworks.jar), droulez le menu File et slectionnezNew pour crer une nouvelle fentre de message (Figure 1.4).Metalworks est la simulation d'un programme de courrier lectroni-que. Droulez ensuite le menu Drag. Celui-ci comporte trois options :Live, pour afficher les fentres pendant leur dplacement, Outline,pour n'afficher que leur contour, et Old and Slow, pour utiliser lamthode de la version prcdente. Comparez le rsultat obtenu avecla premire et la troisime option, et mesurez ainsi les progrs accom-plis !

    sound

    Ce dossier contient une application mettant en valeur les nouvellesfonctionnalits de Java 1.3 en matire de traitement des fichiers don-nes audio et midi (Figure 1.5). Ces fonctionnalits avaient t an-

  • CHAPITRE 1 INSTALLATION DE JAVA 11

    nonces pour la version 1.2, mais avaient subi un certain retard. Pres-que tout ce qui tait promis est maintenant prsent, y compris l'enre-gistrement audio. Toutefois, il manque encore la prise en charge deformats audio fortement compresss permettant le streaming. Parailleurs, quelques imperfections perturbent la lecture des fichiers audio.Avec un processeur 300 MHz, la continuit de la lecture de certainsformats n'est pas assure cent pour cent. Si cela n'offre pas d'incon-vnient pour la parole, il n'en va pas de mme pour la musique. Lesexemples au format rmf sont pratiquement incoutables dans cesconditions.

    jpda

    Ce dossier contient des exemples destins tre utiliss avec la JavaPlatform Debugger Architecture, ainsi que les sources de cette appli-cation.

    Figure 1.4 : Le programme de dmonstration Metalworks.

  • 12 LE DVELOPPEUR JAVA 2

    jdk1.3/docs

    Ce dossier n'existe que si vous avez install la documentation de Java(ce qui est absolument indispensable tout programmeur srieux).La partie la plus importante de la documentation se trouve dans lesous-dossier api. Il s'agit de la documentation de toutes les classesstandard de Java. Le sous-dossier tooldocs contient les informationsconcernant les diffrents outils livrs avec Java.

    jdk1.3/include et jdk1.3/include-old

    Ces dossiers contiennent des fichiers header C qui permettent de lierdes programmes Java avec sous-programmes crits en C. Il est ainsipossible de raliser certaines applications faisant appel des ressour-ces spcifiques un systme donn. Ces programmes ne sont vi-demment plus portables dans un autre environnement.

    Figure 1.5 : Une dmonstration des possibilits audio et midi de Java 2.

  • CHAPITRE 1 INSTALLATION DE JAVA 13

    jdk1.3/lib

    Ce dossier contient divers lments utilitaires mais ne contient plusles classes standard Java comme dans la versions 1.1. Depuis la version1.2, celles-ci ont t reportes dans un nouveau dossier nomm jdk1.3/jre/lib.

    jdk1.3/jre

    Ce dossier contient les lments ncessaires l'excution des pro-grammes, regroups sous le nom de Java 2 Runtime Environment. Ilest galement utilis par le compilateur puisqu'il contient les classesstandard Java. Le J2RE tant systmatiquement install avec le J2SDK,il n'est normalement pas ncessaire de l'installer sparment.

    jdk1.3/jre/bin

    Dans ce sous-dossier se trouvent les excutables utiliss par le J2RE,et en particulier :

    java.exe

    Une autre copie du lanceur d'applications, identique celle se trou-vant dans le rpertoire jdk1.3/bin.

    jdk1.3/jre/bin/hotspot

    Ce dossier contient la JVM HotSpot, utilise par dfaut pour excuterles programmes Java.

    jdk1.3/jre/bin/classic

    Ce dossier contient la JVM classique, c'est--dire n'utilisant qu'un in-terprteur. Une option de la ligne de commande permet d'utilisercette JVM pour excuter un programme. Il peut y avoir, pour cela,deux raisons. La premire consiste vrifier la diffrence de perfor-

  • 14 LE DVELOPPEUR JAVA 2

    mance entre les deux options. La seconde concerne le dbogage desprogrammes. Si un programme ne fonctionne pas comme prvu, il esttoujours intressant de vrifier si le mme problme se pose avec laJVM classique. Cela est particulirement important pour les applica-tions lourdes, telles que les serveurs. Au cas o vous auriez signaleraux programmeurs de Sun Microsystems un ventuel bug, ceux-civous demanderont systmatiquement si le problme se pose de lamme faon avec les deux JVM. La technologie HotSpot est trs pro-metteuse, mais encore un peu jeune. Il faut s'attendre quelquesimperfections mineures.

    jdk1.3/jre/lib

    Ce dossier contient les lments ncessaires au fonctionnement del'interprteur et du compilateur Java, et en particulier l'ensemble desclasses standard compiles, contenues dans le fichier rt.jar. Vous nedevez surtout pas dcompresser ce fichier qui est utilis sous cetteforme.

    On y trouve galement toutes sortes d'autres ressources ncessairesau fonctionnement de Java.

    jdk1.3/src.jar

    Ce fichier contient la quasi-intgralit des sources de Java, c'est--dire lesprogrammes Java ayant servi produire les classes publiques compilesfigurant dans le fichier rt.jar. Il y manque toutefois les classes privesjava.* et sun.*. Il est trs instructif, une fois que vous avez acquis unecertaine connaissance du langage, d'tudier ces fichiers afin de compren-dre comment les concepteurs du langage ont rsolu les problmes qui seposaient eux. Si vous voulez examiner ces sources, vous pouvez lesdcompresser l'aide du programme jar.exe ou encore de Winzip.Nous en verrons un exemple dans un prochain chapitre.

    Configuration de lenvironnementLa configuration de l'environnement comporte deux aspects :

  • CHAPITRE 1 INSTALLATION DE JAVA 15

    Le chemin d'accs aux programmes excutables.

    Le chemin d'accs aux classes Java.

    Le chemin daccs aux programmes excutables

    Pour configurer le chemin d'accs, ouvrez, l'aide d'un diteur de texte, lefichier autoexec.bat se trouvant dans la racine de votre disque dur. Cefichier doit contenir quelques lignes semblables celles-ci :

    @if errorlevel 1 pause

    @echo off

    mode con codepage prepare=((850) c:\windows\command...

    mode con codepage select=850

    keyb fr,,c:\windows\command\keyboard.sys

    set blaster=a220 i5 d1 t4

    set path=c:\windows;c:\progra~1\ultraedt

    Votre fichier peut tre trs diffrent de celui-ci, mais l'important est de sa-voir s'il contient ou non une commande de configuration du chemin d'ac-cs aux programmes excutables. Localisez la ligne commenant par setpath, ou simplement path - les deux formes tant quivalentes -, et ajoutez la fin de celle-ci la commande suivante :

    ;c:\jdk1.3\bin

    Dans l'exemple prcdent, la ligne complte devient :

    set path=c:\windows;c:\progra~1\ultraedt;c:\jdk1.3\bin

    ou :

    path c:\windows;c:\progra~1\ultraedt;c:\jdk1.3\bin

  • 16 LE DVELOPPEUR JAVA 2

    Note 1 : Si la ligne se terminait dj par un point-virgule, n'en ajoutez pasun second.

    Note 2 : Vous pouvez taper en majuscules ou en minuscules, cela n'a pasd'importance.

    Note 3 : La ligne commenant par set path peut tout aussi bien com-mencer par path (sans le signe gal). Ces deux formes sont quivalentes.

    Si votre fichier autoexec.bat ne comportait pas de ligne commenant parset path, ajoutez simplement la ligne suivante la fin du fichier :

    setpath=c:\jdk1.3\bin

    ou :

    path c:\jdk1.3\bin

    La variable d'environnement path indique Windows les chemins d'accsqu'il doit utiliser pour trouver les programmes excutables. Les program-mes excutables du J2SDK se trouvent dans le sous-dossier bin du dossierdans lequel le J2SDK est install. Ce dossier est normalement c:\jdk1.3. Sivous avez install le J2SDK dans un autre dossier, vous devez videmmentmodifier la ligne en consquence.

    Attention : Windows cherche les programmes excutables tout d'aborddans le dossier partir duquel la commande est tape, puis dans les dos-siers dont les chemins d'accs sont indiqus par la variable path, dansl'ordre o ils figurent sur la ligne de configuration set path. Ainsi, si vousavez install le J2SDK 1.2.2, votre fichier autoexec.bat contient (par exem-ple) la ligne :

    setpath=c:\windows\;c:\jdk1.2.2\bin

    Si vous ajoutez le chemin d'accs au rpertoire bin du J2SDK 1.3 ainsi :

  • CHAPITRE 1 INSTALLATION DE JAVA 17

    setpath=c:\windows\;c:\jdk1.2.2\bin;c:\jdk1.3\bin

    le compilateur du J2SDK 1.3 ne sera jamais excut car son fichier excuta-ble porte le mme nom que dans la version 1.2.2. Le chemin d'accs cetteversion se trouvant avant celui de la nouvelle version dans la ligne setpath,c'est l'ancienne version qui sera excute1.

    Note : Pour que les modifications apportes au fichier autoexec.bat soientprises en compte, vous devez redmarrer Windows. Le plus si