706
http://www.free-livres.com/

Apprenez a Programmer en Java CYRILLE HERBY

  • Upload
    rsky2012

  • View
    1.685

  • Download
    187

Embed Size (px)

Citation preview

http://www.free-livres.com/

Cet ouvrage a bnci des relectures attentives des zCorrecteurs.

Sauf mention contraire, le contenu de cet ouvrage est publi sous la licence : Creative Commons BY-NC-SA 2.0 La copie de cet ouvrage est autorise sous rserve du respect des conditions de la licence Texte complet de la licence disponible sur : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ Simple IT 2011 - ISBN : 978-2-9535278-3-4

Avant-propos

S

i vous lisez ces lignes, c'est que nous avons au moins deux choses en commun : l'informatique vous intresse et vous avez envie d'apprendre programmer. Enn, quand je dis en commun, je voulais dire en commun avec moi au moment o je voulais apprendre la programmation. Pour moi, tout a commenc sur un site maintenant trs connu : le Site du Zro. tant dbutant et cherchant tout prix des cours adapts mon niveau, je suis naturellement tomb amoureux de ce site qui propose des cours d'informatique accessibles au plus grand nombre. Vous l'aurez sans doute remarqu, trouver un cours d'informatique simple et clair (sur les rseaux, les machines, la programmation. . .) est habituellement un vrai parcours du combattant. Je ne me suis pas dcourag et je me suis professionnalis, via une formation diplmante, tout en suivant l'actualit de mon site prfr. . . Au sein de cette formation, j'ai pu voir divers aspects de mon futur mtier, notamment la programmation dans les langages PHP, C#, JavaScript et, bien sr, Java. Trs vite, j'ai aim travailler avec ce dernier, d'une part parce qu'il est agrable manipuler, souple utiliser en demandant toutefois de la rigueur (ce qui oblige structurer ses programmes), et d'autre part parce qu'il existe de nombreuses ressources disponibles sur Internet (mais pas toujours trs claires pour un dbutant). J'ai depuis obtenu mon diplme et trouv un emploi, mais je n'ai jamais oubli la dicult des premiers temps. Comme le Site du Zro permet d'crire des tutoriels et de les partager avec la communaut, j'ai dcid d'employer les connaissances acquises durant ma formation et dans mon travail rdiger un tutoriel permettant d'aborder mon langage de prdilection avec simplicit. J'ai donc pris mon courage deux mains et j'ai commenc crire. Beaucoup de lecteurs se sont rapidement montrs intresss, pour mon plus grand plaisir. De ce fait, mon tutoriel a t mis en avant sur le site et, aujourd'hui, il est adapt dans la collection Livre du Zro . Je suis heureux du chemin parcouru, heureux d'avoir pu aider tant de dbutants et heureux de pouvoir vous aider votre tour !

i

CHAPITRE 0. AVANT-PROPOS

Et Java dans tout a ?Java est un langage de programmation trs utilis, notamment par un grand nombre de dveloppeurs professionnels, ce qui en fait un langage incontournable actuellement. Voici les caractristiques de Java en quelques mots. Java est un langage de programmation moderne dvelopp par Sun Microsystems, aujourd'hui rachet par Oracle. Il ne faut surtout pas le confondre avec JavaScript (langage de script utilis sur les sites Web), car ils n'ont rien voir. Une de ses plus grandes forces est son excellente portabilit : une fois votre programme cr, il fonctionnera automatiquement sous Windows, Mac, Linux, etc. On peut faire de nombreux types de programmes avec Java : des applications, sous forme de fentre ou de console ; des applets, qui sont des programmes Java incorpors des pages Web ; des applications pour appareils mobiles, comme les smartphones, avec J2ME (Java 2 Micro Edition) ; des sites web dynamiques, avec J2EE (Java 2 Enterprise Edition, maintenant JEE) ; et bien d'autres : JMF (Java Media Framework), J3D pour la 3D. . . Comme vous le voyez, Java permet de raliser une trs grande quantit d'applications direntes ! Mais. . . comment apprendre un langage si vaste qui ore tant de possibilits ? Heureusement, ce livre est l pour tout vous apprendre sur Java partir de zro. Java est donc un langage de programmation, un langage dit compil : il faut comprendre par l que ce que vous allez crire n'est pas directement comprhensible et utilisable par votre ordinateur. Nous devrons donc passer par une tape de compilation (tape obscure o votre code source est entirement transform). En fait, on peut distinguer trois grandes phases dans la vie d'un code Java : la phase d'criture du code source, en langage Java ; la phase de compilation de votre code ; la phase d'excution. Ces phases sont les mmes pour la plupart des langages compils (C, C++. . .). Par contre, ce qui fait la particularit de Java, c'est que le rsultat de la compilation n'est pas directement utilisable par votre ordinateur. Les langages mentionns ci-dessus permettent de faire des programmes directement comprhensibles par votre machine aprs compilation, mais avec Java, c'est lgrement dirent. En C++ par exemple, si vous voulez faire en sorte que votre programme soit exploitable sur une machine utilisant Windows et sur une machine utilisant Linux, vous allez devoir prendre en compte les spcicits de ces deux systmes d'exploitation dans votre code source et compiler une version spciale pour chacun d'eux. Avec Java, c'est un programme appel la machine virtuelle qui va se charger de retranscrire le rsultat de la compilation en langage machine, interprtable par celle-ci. Vous n'avez pas vous proccuper des spcicits de la machine qui va excuter votre programme : la machine virtuelle Java s'en charge pour vous ! ii

QU'ALLEZ-VOUS APPRENDRE EN LISANT CE LIVRE ?

Qu'allez-vous apprendre en lisant ce livre ?Ce livre a t conu en partant du principe que vous ne connaissez rien la programmation. Voil le plan en quatre parties que nous allons suivre tout au long de cet ouvrage. 1. Les bases de Java : nous verrons ici ce qu'est Java et comment il fonctionne. Nous crerons notre premier programme, en utilisant des variables, des oprateurs, des conditions, des boucles. . . Nous apprendrons les bases du langage, qui vous seront ncessaires par la suite. 2. Java et la Programmation Oriente Objet : aprs avoir dompt les bases du langage, vous allez devoir apprivoiser une notion capitale : l'objet. Vous apprendrez encapsuler vos morceaux de code an de les rendre modulables et rutilisables, mais il y aura du travail fournir. 3. Les interfaces graphiques : l, nous verrons comment crer des interfaces graphiques et comment les rendre interactives. C'est vrai que jusqu' prsent, nous avons travaill en mode console. Il faudra vous accrocher un peu car il y a beaucoup de composants utilisables, mais le jeu en vaut la chandelle ! Nous passerons en revue dirents composants graphiques tels que les champs de texte, les cases cocher, les tableaux, les arbres ainsi que quelques notions spciques comme le drag'n drop. 4. Interactions avec les bases de donnes : de nos jours, avec la course aux donnes, beaucoup de programmes doivent interagir avec ce qu'on appelle des bases de donnes. Dans cette partie, nous verrons comment s'y connecter, comment rcuprer des informations et comment les exploiter.

Comment lire ce livre ?Suivez l'ordre des chapitresLisez ce livre comme on lit un roman. Il a t conu de cette faon. Contrairement beaucoup de livres techniques o il est courant de lire en diagonale et de sauter certains chapitres, ici il est trs fortement recommand de suivre l'ordre du cours, moins que vous ne soyez dj un peu expriments.

Pratiquez en mme tempsPratiquez rgulirement. N'attendez pas d'avoir ni la lecture de ce livre pour allumer votre ordinateur et faire vos propres essais. iii

CHAPITRE 0. AVANT-PROPOS

Utilisez les codes web !An de tirer parti du Site du Zro dont est issu ce livre, celui-ci vous propose ce qu'on appelle des codes web . Ce sont des codes six chires entrer sur une page du Site du Zro pour tre automatiquement redirig vers un site web sans avoir en recopier l'adresse. Pour utiliser les codes web, rendez-vous sur la page suivante 1 :http://www.siteduzero.com/codeweb.html

Un formulaire vous invite rentrer votre code web. Faites un premier essai avec le code ci-dessous : Tester le code web Code web : 123456 Ces codes web ont deux intrts : vous faire tlcharger les codes source inclus dans ce livre, ce qui vous vitera d'avoir recopier certains codes un peu longs ; vous rediriger vers les sites web prsents tout au long du cours. Ce systme de redirection nous permet de tenir jour le livre que vous avez entre les mains sans que vous ayez besoin d'acheter systmatiquement chaque nouvelle dition. Si un site web change d'adresse, nous modierons la redirection mais le code web utiliser restera le mme. Si un site web disparat, nous vous redirigerons vers une page du Site du Zro expliquant ce qui s'est pass et vous proposant une alternative. En clair, c'est un moyen de nous assurer de la prennit de cet ouvrage sans que vous ayez faire quoi que ce soit !

Ce livre est issu du Site du ZroCet ouvrage reprend le cours Java prsent sur le Site du Zro dans une dition revue et corrige, avec de nombreuses mises jour. Il reprend les lments qui ont fait le succs des cours du site, c'est--dire leur approche progressive et pdagogique, le ton dcontract et lger, ainsi que les TP vous permettant de rellement pratiquer de faon autonome. Ce livre s'adresse donc toute personne dsireuse d'apprendre les bases de la programmation en Java, que ce soit : par curiosit ; par intrt personnel ; par besoin professionnel.1. Vous pouvez aussi utiliser le formulaire de recherche du Site du Zro, section Code Web .

iv

REMERCIEMENTS

RemerciementsComme pour la plupart des ouvrages, beaucoup de personnes ont particip de prs ou de loin l'laboration de ce livre et j'en prote donc pour les en remercier. Ma compagne, Manuela, qui me supporte et qui tolre mes heures passes crire les tutoriels pour le Site du Zro. Un merci spcial toi qui me prends dans tes bras lorsque a ne va pas, qui m'embrasses lorsque je suis triste, qui me souris lorsque je te regarde, qui me donnes tant d'amour lorsque le temps est maussade : pour tout a et plus encore, je t'aime ; Agns HAASSER (Ttie), Damien SMEETS (Karl Yeurl), Mickal SALAMIN (micky), Franois GLORIEUX (Nox), Christophe TAFANI-DEREEPER, Romain CAMPILLO (Le Chapelier Toqu), Charles DUPR (Barbatos), Maxence CORDIEZ (Ziame), Philippe LUTUN (ptipilou), zCorrecteurs m'ayant accompagn dans la correction de cet ouvrage ; Mathieu NEBRA (alias M@teo21), pre fondateur du Site du Zro, qui m'a fait conance, soutenu dans mes dmarches et qui m'a donn de prcieux conseils ; Tous les Zros qui m'ont apport leur soutien et leurs remarques ; Toutes les personnes qui m'ont contact pour me faire des suggestions et m'apporter leur expertise. Merci aussi toutes celles et ceux qui m'ont apport leur soutien et qui me permettent d'apprendre toujours plus au quotidien, mes collgues de travail : Thomas, qui a toujours des questions sur des sujets totalement dlirants ; Angelo, mon chef ador, qui est un puits de science en informatique ; Olivier, la force zen, qui n'a pas son pareil pour aller droit au but ; Dylan, discret mais d'une comptence plus que certaine dans des domaines aussi divers que varis ; Jrme, que j'ai martyris mais qui, j'en suis persuad, a ador. . . :-)

v

CHAPITRE 0. AVANT-PROPOS

vi

Sommaire

Avant-proposEt Java dans tout a ? . . . . . . . . . . . . Qu'allez-vous apprendre en lisant ce livre ? Comment lire ce livre ? . . . . . . . . . . . . Ce livre est issu du Site du Zro . . . . . . Remerciements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iii iii iii iv v

I Les bases de Java1 Installer les outils de dveloppement

13

Installer les outils ncessaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Votre premier programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2 Les variables et les oprateurs

23

Les dirents types de variables . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Les oprateurs arithmtiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Les conversions, ou cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3 Lire les entres clavier

33

La classe Scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Rcuprer ce que vous tapez . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4 Les conditionsvii

39

SOMMAIRE La structure if... else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 La structure switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 La condition ternaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5 Les boucles

47

La boucle while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 La boucle do... while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 La boucle for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6 TP : conversion Celsius - Fahrenheit

55

laboration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

7 Les tableaux

61

Tableau une dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Les tableaux multidimensionnels . . . . . . . . . . . . . . . . . . . . . . . . . 62 Utiliser et rechercher dans un tableau . . . . . . . . . . . . . . . . . . . . . . 63

8 Les mthodes de classe

69

Quelques mthodes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Crer sa propre mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 La surcharge de mthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

II Java et la Programmation Oriente Objet9 Votre premire classe

7981

Structure de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Les constructeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Accesseurs et mutateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Les variables de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Le principe d'encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

10 L'hritage

99

Le principe de l'hritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 Le polymorphisme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 viii

SOMMAIRE

11 Modliser ses objets grce UML

111

Prsentation d'UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Modliser ses objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Modliser les liens entre les objets . . . . . . . . . . . . . . . . . . . . . . . . 114

12 Les packages

119

Cration d'un package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Droits d'accs entre les packages . . . . . . . . . . . . . . . . . . . . . . . . . 121

13 Les classes abstraites et les interfaces

123

Les classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Les interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Le pattern strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

14 Les exceptions

157

Le bloc try{...} catch{...} . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Les exceptions personnalises . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 La gestion de plusieurs exceptions . . . . . . . . . . . . . . . . . . . . . . . . 164

15 Les ux d'entre/sortie

167

Utilisation de java.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Utilisation de java.nio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Le pattern decorator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

16 Les numrations

197

Avant les numrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Une solution : les enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

17 Les collections d'objetsLes dirents types de collections Les objets List . . . . . . . . . . Les objets Map . . . . . . . . . . Les objets Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

203204 205 208 209

18 La gnricit en Java

213

Principe de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Gnricit et collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ix

SOMMAIRE

19 Java et la rexivit

227

L'objet Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Instanciation dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

III Les interfaces graphiques20 Notre premire fentre

237239

L'objet JFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 L'objet JPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Les objets Graphics et Graphics2D . . . . . . . . . . . . . . . . . . . . . . . 246

21 Le l rouge : une animation

259

Cration de l'animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Amliorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

22 Positionner des boutons

269

Utiliser la classe JButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Positionner son composant : les layout managers . . . . . . . . . . . . . . . . 272

23 Interagir avec des boutonsUne classe Bouton personnalise . . . . . . . . . . . . . . Interagir avec son bouton . . . . . . . . . . . . . . . . . . tre l'coute de ses objets : le design pattern Observer Cadeau : un bouton personnalis optimis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

289290 298 318 327

24 TP : une calculatricelaboration . . . . . . . . . Conception . . . . . . . . . Correction . . . . . . . . . . Gnrer un .jar excutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

331332 332 333 338

25 Excuter des tches simultanmentUne classe hrite de Thread Utiliser l'interface Runnable . Synchroniser ses threads . . . Contrler son animation . . . x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

345346 350 354 355

SOMMAIRE

26 Les champs de formulaireLes listes : l'objet JComboBox . . . . . . . . . Les cases cocher : l'objet JCheckBox . . . . Les champs de texte : l'objet JTextField . . Contrle du clavier : l'interface KeyListener . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

359360 370 381 385

27 Les menus et botes de dialogue

391

Les botes de dialogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Les menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

28 TP : l'ardoise magiqueCahier des charges . . . Prrequis . . . . . . . . Correction . . . . . . . . Amliorations possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

439440 441 442 448

29 Conteneurs, sliders et barres de progression

449

Autres conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 Enjoliver vos IHM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

30 Les arbres et leur structureLa composition des arbres . . . . Des arbres qui vous parlent . . . Dcorez vos arbres . . . . . . . . Modier le contenu de nos arbres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

471472 476 481 486

31 Les interfaces de tableauxPremiers pas . . . . . . . . . . . Gestion de l'achage . . . . . . . Interaction avec l'objet JTable . Ajouter des lignes et des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

495496 497 508 515

32 TP : le pendu

519

Cahier des charges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 Prrequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 xi

SOMMAIRE

33 Mieux structurer son code : le pattern MVCPremiers pas Le modle . . Le contrleur La vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

525526 528 531 534

34 Le Drag'n DropPrsentation . . . . . . . . . . . . . . Fonctionnement . . . . . . . . . . . Crer son propre TransferHandler . Activer le drop sur un JTree . . . . Eet de dplacement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

539540 543 547 553 558

35 Mieux grer les interactions avec les composants

565

Prsentation des protagonistes . . . . . . . . . . . . . . . . . . . . . . . . . . 566 Utiliser l'EDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 La classe SwingWorker . . . . . . . . . . . . . . . . . . . . . . . . . . . 570

IV Interactions avec les bases de donnes36 JDBC : la porte d'accs aux bases de donnes

577579

Rappels sur les bases de donnes . . . . . . . . . . . . . . . . . . . . . . . . . 580 Prparer la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 Se connecter la base de donnes . . . . . . . . . . . . . . . . . . . . . . . . . 591

37 Fouiller dans sa base de donnesLe couple Statement ResultSet . Les requtes prpares . . . . . . . . Modier des donnes . . . . . . . . . Statement, toujours plus fort . . . . Grer les transactions manuellement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

597598 607 613 615 617

38 Limiter le nombre de connexions

621

Pourquoi ne se connecter qu'une seule fois ? . . . . . . . . . . . . . . . . . . . 622 Le pattern singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 xii

SOMMAIRE Le singleton dans tous ses tats . . . . . . . . . . . . . . . . . . . . . . . . . . 625

39 TP : un testeur de requtes

629

Cahier des charges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Quelques captures d'cran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630

40 Lier ses tables avec des objets Java : le pattern DAO

633

Avant toute chose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 Le pattern DAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 Le pattern factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649

xiii

SOMMAIRE

xiv

Premire partieLes bases de Java

1

Chapitre

1Dicult :

Installer les outils de dveloppement

L

'un des principes phares de Java rside dans sa machine virtuelle : celle-ci assure tous les dveloppeurs Java qu'un programme sera utilisable avec tous les systmes d'exploitation sur lesquels est installe une machine virtuelle Java. Lors de la phase de compilation de notre code source, celui-ci prend une forme intermdiaire appele byte code : c'est le fameux code inintelligible pour votre machine, mais interprtable par la machine virtuelle Java. Cette dernire porte un nom : on parle plus communment de JRE (Java Runtime Environment). Plus besoin de se soucier des spcicits lies tel ou tel OS (Operating System, soit systme d'exploitation). Nous pourrons donc nous consacrer entirement notre programme. An de nous simplier la vie, nous allons utiliser un outil de dveloppement, ou IDE (Integrated Development Environment), pour nous aider crire nos futurs codes source. . . Nous allons donc avoir besoin de direntes choses an de pouvoir crer des programmes Java : la premire est ce fameux JRE !

3

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT

Installer les outils ncessairesJRE ou JDKTlchargez votre environnement Java sur le site d'Oracle.

Tlcharger JRE Code web : 924260

Choisissez la dernire version stable (gure 1.1).

Figure

1.1 Encart de tlchargement

Vous avez sans doute remarqu qu'on vous propose de tlcharger soit le JRE, soit le JDK 1 . La dirence entre ces deux environnements est crite, mais pour les personnes fches avec l'anglais, sachez que le JRE contient tout le ncessaire pour faire en sorte que vos programmes Java puissent tre excuts sur votre ordinateur ; le JDK, en plus de contenir le JRE, contient tout le ncessaire pour dvelopper, compiler. . . L'IDE contenant dj tout le ncessaire pour le dveloppement et la compilation, nous n'avons besoin que du JRE. Une fois que vous avez cliqu sur Download JRE , vous arrivez sur la page correspondante (gure 1.2). Slectionnez votre systme d'exploitation et cochez la case : I agree to the Java SE Development Kit 6 License Agreement . Lorsque vous serez l'cran correspondant (gure 1.3), slectionnez celui de votre choix puis validez. Je vous ai dit que Java permet de dvelopper dirents types d'applications : il y a donc des environnements permettant de crer des programmes pour direntes platesformes. J2SE 2 : permet de dvelopper des applications dites client lourd , par exemple1. Java Development Kit. 2. Java 2 Standard Edition, celui qui nous intresse dans cet ouvrage.

4

INSTALLER LES OUTILS NCESSAIRES

Figure

1.2 Page de choix de votre systme d'exploitation

Figure

1.3 Choix de l'excutable

5

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT Word, Excel, la suite OpenOce.org. . . Toutes ces applications sont des clients lourds . C'est ce que nous allons faire dans ce livre. J2EE 3 : permet de dvelopper des applications web en Java. On parle aussi de clients lgers. J2ME 4 : permet de dvelopper des applications pour appareils portables, comme des tlphones portables, des PDA. . .

Eclipse IDEAvant toute chose, quelques mots sur le projet Eclipse. Eclipse IDE est un environnement de dveloppement libre permettant de crer des programmes dans de nombreux langages de programmation (Java, C++, PHP. . .). C'est en somme l'outil que nous allons utiliser pour programmer.

Eclipse IDE est lui-mme principalement crit en Java.Je vous invite donc tlcharger Eclipse IDE. Tlcharger Eclipse Code web : 395144 Accdez la page de tlchargement puis choisissez Eclipse IDE for Java Developers , en choisissant la version d'Eclipse correspondant votre OS 5 (gure 1.4).

Figure

1.4 Version d'Eclipse IDE

Slectionnez maintenant le miroir que vous souhaitez utiliser pour obtenir Eclipse. Voil, vous n'avez plus qu' attendre la n du tlchargement. Pour ceux qui l'avaient devin, Eclipse est le petit logiciel qui va nous permettre de dvelopper nos applications ou nos applets, et aussi celui qui va compiler tout a. Notre logiciel va donc permettre de traduire nos futurs programmes Java en langage byte code, comprhensible uniquement par votre JRE, frachement install. La spcicit d'Eclipse IDE vient du fait que son architecture est totalement dveloppe autour de la notion de plug-in. Cela signie que toutes ses fonctionnalits sont dveloppes en tant que plug-ins. Pour faire court, si vous voulez ajouter des fonctionnalits Eclipse, vous devez :3. Java 2 Enterprise Edition. 4. Java 2 Micro Edition. 5. Operating System = systme d'exploitation.

6

INSTALLER LES OUTILS NCESSAIRES tlcharger le plug-in correspondant ; copier les chiers spcis dans les rpertoires spcis ; dmarrer Eclipse, et a y est !

Lorsque vous tlchargez un nouveau plug-in pour Eclipse, celui-ci se prsente souvent comme un dossier contenant gnralement deux sous-dossiers : un dossier plugins et un dossier features . Ces dossiers existent aussi dans le rpertoire d'Eclipse. Il vous faut donc copier le contenu des dossiers de votre plug-in vers le dossier correspondant dans Eclipse (plugins dans plugins, et features dans features).Vous devez maintenant avoir une archive contenant Eclipse. Dcompressez-la o vous voulez, puis entrez dans ce dossier (gure 1.5). Cela fait, lancez Eclipse.

Figure

1.5 Contenu du dossier Eclipse

Ici (gure 1.6), Eclipse vous demande dans quel dossier vous souhaitez enregistrer vos projets ; sachez que rien ne vous empche de spcier un autre dossier que celui propos par dfaut.

Figure

1.6 Premire fentre Eclipse 7

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT Une fois cette tape eectue, vous arrivez sur la page d'accueil d'Eclipse. Si vous avez envie d'y jeter un il, allez-y.

Prsentation rapide de l'interfaceJe vais maintenant vous faire faire un tour rapide de l'interface d'Eclipse.

Le menu File (gure 1.7)

Figure

1.7 Menu File

C'est ici que nous pourrons crer de nouveaux projets Java, les enregistrer et les exporter le cas chant. Les raccourcis retenir sont : ALT + SHIFT + N : nouveau projet ; CTRL + S : enregistrer le chier o l'on est positionn ; CTRL + SHIFT + S : tout sauvegarder ; CTRL + W : fermer le chier o l'on est positionn ; CTRL + SHIFT + W : fermer tous les chiers ouverts. 8

INSTALLER LES OUTILS NCESSAIRES

Figure

1.8 Menu Edit

Le menu Edit (gure 1.8)Dans ce menu, nous pourrons utiliser les commandes copier , coller , etc. Ici, les raccourcis retenir sont : CTRL + C : copier la slection ; CTRL + X : couper la slection ; CTRL + V : coller la slection ; CTRL + A : tout slectionner ; CTRL + F : chercher-remplacer.

Le menu Window (gure 1.9)

Figure

1.9 Menu Window 9

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT Dans celui-ci, nous pourrons congurer Eclipse selon nos besoins.

La barre d'outils (gure 1.10)

Figure

1.10 Barre d'outils

Nous avons dans l'ordre : 1. 2. 3. 4. 5. 6. nouveau gnral. Cliquer sur ce bouton revient faire Fichier / Nouveau ; enregistrer. Revient faire CTRL + S ; imprimer ; excuter la classe ou le projet spci. Nous verrons ceci plus en dtail ; crer un nouveau projet. Revient faire Fichier / Nouveau / Java Project ; crer une nouvelle classe, c'est--dire en fait un nouveau chier. Revient faire Fichier / Nouveau / Classe .

Maintenant, je vais vous demander de crer un nouveau projet Java (gures 1.11 et 1.12).

Figure

1.11 Cration de projet Java - tape 1

Renseignez le nom de votre projet comme je l'ai fait (encadr 1). Vous pouvez aussi voir o sera enregistr ce projet (encadr 2). Un peu plus compliqu, maintenant : vous avez donc un environnement Java sur votre machine, mais dans le cas o vous en auriez plusieurs, vous pouvez aussi spcier Eclipse quel JRE 6 utiliser pour ce projet. Vous devriez avoir un nouveau projet dans la fentre de gauche (gure 1.13).6. Vous pourrez changer ceci tout moment dans Eclipse en allant dans Window / Preferences , en dpliant l'arbre Java dans la fentre et en choisissant Installed JRE .

10

INSTALLER LES OUTILS NCESSAIRES

Figure

1.12 Cration de projet Java - tape 2

Figure

1.13 Explorateur de projet 11

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT Pour boucler la boucle, ajoutons ds maintenant une nouvelle classe dans ce projet comme nous avons appris le faire plus tt. Voici la fentre sur laquelle vous devriez tomber : gure 1.14.

Une classe est un ensemble de codes contenant plusieurs instructions que doit eectuer votre programme. Ne vous attardez pas trop sur ce terme, nous aurons l'occasion d'y revenir.

Figure

1.14 Cration d'une classe

Dans l'encadr 1, nous pouvons voir o seront enregistrs nos chiers Java. Dans l'encadr 2, nommez votre classe Java ; moi, j'ai choisi sdz1. Dans l'encadr 3, Eclipse vous demande si cette classe a quelque chose de particulier. Eh bien oui ! Cochez public static void main(String[] args) 7 , puis cliquez sur Finish . Avant de commencer coder, nous allons explorer l'espace de travail (gure 1.15). Dans l'encadr de gauche, vous trouverez le dossier de votre projet ainsi que son contenu. Ici, vous pourrez grer votre projet comme bon vous semble (ajout, suppression. . .). Dans l'encadr positionn au centre, je pense que vous avez devin : c'est ici que nous7. Nous reviendrons plus tard sur ce point.

12

INSTALLER LES OUTILS NCESSAIRES

Figure

1.15 Fentre principale

13

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT allons crire nos codes source. Dans l'encadr du bas, c'est l que vous verrez apparatre le contenu de vos programmes. . . ainsi que les erreurs ventuelles ! Et pour nir, c'est dans l'encadr de droite, ds que nous aurons appris coder nos propres fonctions et nos objets, que la liste des mthodes et des variables sera ache.

Votre premier programmeComme je vous l'ai maintes fois rpt, les programmes Java sont, avant d'tre utiliss par la machine virtuelle, prcompils en byte code (par votre IDE ou la main). Ce byte code n'est comprhensible que par une JVM, et c'est celle-ci qui va faire le lien entre ce code et votre machine. Vous aviez srement remarqu que sur la page de tlchargement du JRE, plusieurs liens taient disponibles : un lien pour Windows ; un lien pour Mac ; un lien pour Linux. Ceci, car la machine virtuelle Java se prsente diremment selon qu'on se trouve sous Mac, sous Linux ou encore sous Windows. Par contre, le byte code, lui, reste le mme quel que soit l'environnement avec lequel a t dvelopp et prcompil votre programme Java.

Consquence directe : quel que soit l'OS sous lequel a t cod un programme Java, n'importe quelle machine pourra l'excuter si elle dispose d'une JVM ! Tu n'arrtes pas de nous rabcher byte code par-ci, byte code par-l. . . Mais c'est quoi, au juste ?Eh bien, un byte code 8 n'est rien d'autre qu'un code intermdiaire entre votre code Java et le code machine. Ce code particulier se trouve dans les chiers prcompils de vos programmes ; en Java, un chier source a pour extension .java et un chier prcompil a l'extension .class : c'est dans ce dernier que vous trouverez du byte code. Je vous invite examiner un chier .class la n de cette partie (vous en aurez au moins un), mais je vous prviens, c'est illisible ! Par contre, vos chiers .java sont de simples chiers texte dont l'extension a t change. Vous pouvez donc les ouvrir, les crer ou encore les mettre jour avec le Bloc-notes de Windows, par exemple. Cela implique que, si vous le souhaitez, vous pouvez crire des programmes Java avec le Bloc-notes ou encore avec Notepad++.8. Il existe plusieurs types de byte code, mais nous parlons ici de celui cr par Java.

14

VOTRE PREMIER PROGRAMME Reprenons. Vous devez savoir que tous les programmes Java sont composs d'au moins une classe. Cette classe doit contenir une mthode appele main : ce sera le point de dmarrage de notre programme. Une mthode est une suite d'instructions excuter. C'est un morceau de logique de notre programme. Une mthode contient : un en-tte : celui-ci va tre en quelque sorte la carte d'identit de la mthode ; un corps : le contenu de la mthode, dlimit par des accolades ; une valeur de retour : le rsultat que la mthode va retourner.

Vous verrez un peu plus tard qu'un programme n'est qu'une multitude de classes qui s'utilisent l'une l'autre. Mais pour le moment, nous n'allons travailler qu'avec une seule classe.Je vous avais demand de crer un projet Java ; ouvrez-le (gure 1.16).

Figure

1.16 Mthode principale

Vous voyez la fameuse classe dont je vous parlais ? Ici, elle s'appelle sdz1 . Vous pouvez voir que le mot class est prcd du mot public, dont nous verrons la signication lorsque nous programmerons des objets. Pour le moment, ce que vous devez retenir, c'est que votre classe est dnie par un mot cl (class), qu'elle a un nom (ici, sdz1) et que son contenu est dlimit par des accolades ({}). Nous crirons nos codes sources entre la mthode main. La syntaxe de cette mthode est toujours la mme :puli stti void min@tring rgsA{ GGgontenu de votre lsse }

Ce sera entre les accolades de la mthode main que nous crirons nos codes source.15

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT

Excuse-nous, mais. . . pourquoi as-tu crit //Contenu de votre classe et pas Contenu de votre classe ?Bonne question ! Je vous ai dit plus haut que votre programme Java, avant de pouvoir tre excut, doit tre prcompil en byte code. Eh bien, la possibilit de forcer le compilateur ignorer certaines instructions existe ! C'est ce qu'on appelle des commentaires, et deux syntaxes sont disponibles pour commenter son texte. Il y a les commentaires unilignes : introduits par les symboles //, ils mettent tout ce qui les suit en commentaire, du moment que le texte se trouve sur la mme ligne que les //.puli stti void min@tring rgsA{ GGn ommentire GGn utre GGinore un utre gei n9est ps un ommentire 3 }

Il y a les commentaires multilignes : ils sont introduits par les symboles /* et se terminent par les symboles */.puli stti void min@tring rgsA{ GB n ommentire n utre inore un utre BG gei n9est ps un ommentire 3 }

D'accord, mais a sert quoi ?C'est simple : au dbut, vous ne ferez que de trs petits programmes. Mais ds que vous aurez pris de la bouteille, leurs tailles et le nombre de classes qui les composeront vont augmenter. Vous serez contents de trouver quelques lignes de commentaires au dbut de votre classe pour vous dire quoi elle sert, ou encore des commentaires dans une mthode qui eectue des choses compliques an de savoir o vous en tes dans vos traitements. . . Il existe en fait une troisime syntaxe, mais elle a une utilit particulire. Elle permettra de gnrer une documentation pour votre programme : une Javadoc (Java Documenta16

VOTRE PREMIER PROGRAMME tion). Je n'en parlerai que trs peu, et pas dans ce chapitre. Nous verrons cela lorsque nous programmerons des objets, mais pour les curieux, je vous conseille le trs bon cours de dworkin sur ce sujet disponible sur le Site du Zro. Prsentation de la Javadoc Code web : 478278

partir de maintenant et jusqu' ce que nous programmions des interfaces graphiques, nous allons faire ce qu'on appelle des programmes procduraux. Cela signie que le programme s'excutera de faon procdurale, c'est--dire qui s'eectue de haut en bas, une ligne aprs l'autre. Bien sr, il y a des instructions qui permettent de rpter des morceaux de code, mais le programme en lui-mme se terminera une fois parvenu la n du code. Cela vient en opposition la programmation vnementielle (ou graphique) qui, elle, est base sur des vnements (clic de souris, choix dans un menu. . .).

Hello WorldMaintenant, essayons de taper le code suivant :puli stti void min@tring rgsA{ ystemFoutFprint@4rello orld 34AY }

en Java sont suivies d'un point-virgule.

N'oubliez surtout pas le " ; " la n de la ligne ! Toutes les instructions

Une fois que vous avez saisi cette ligne de code dans votre mthode main, il vous faut lancer le programme. Si vous vous souvenez bien de la prsentation faite prcdemment, vous devez cliquer sur la che blanche dans un rond vert (gure 1.17).

Figure

1.17 Bouton de lancement du programme

Si vous regardez dans votre console, dans la fentre du bas sous Eclipse, vous devriez voir la gure 1.18. Expliquons un peu cette ligne de code. Littralement, elle signie la mthode print() va crire Hello World ! en utilisant l'objet out de la classe System . System : ceci correspond l'appel d'une classe qui se nomme System . C'est une classe utilitaire qui permet surtout d'utiliser l'entre et la sortie standard, c'est--dire la saisie clavier et l'achage l'cran. out : objet de la classe System qui gre la sortie standard. 17

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT

Figure

1.18 Console d'Eclipse

print : mthode qui crit dans la console le texte pass en paramtre. Si vous mettez plusieurs System.out.print, voici ce qui se passe. Prenons ce code :ystemFoutFprint@4rello orld 34AY ystemFoutFprint@4wy nme is4AY ystemFoutFprint@4gysoy4AY

Lorsque vous l'excutez, vous devriez voir des chanes de caractres qui se suivent sans saut de ligne. Autrement dit, ceci s'achera dans votre console :Hello World !My name isCysboy

Je me doute que vous souhaiteriez insrer un retour la ligne pour que votre texte soit plus lisible. . . Pour cela, vous avez plusieurs solutions : soit vous utilisez un caractre d'chappement, ici \n ; soit vous utilisez la mthode println() la place de la mthode print(). Donc, si nous reprenons notre code prcdent et que nous appliquons cela, voici ce que a donnerait :ystemFoutFprint@4rello orld 3 n4AY ystemFoutFprintln@4wy nme is4AY ystemFoutFprintln@4ngysoy4AY

Le rsultat :Hello World ! My name is Cysboy

Vous pouvez voir que : lorsque vous utilisez le caractre d'chappement \n, quelle que soit la mthode appele, celle-ci ajoute immdiatement un retour la ligne son emplacement ; lorsque vous utilisez la mthode println(), celle-ci ajoute automatiquement un retour la ligne la n de la chane passe en paramtre ; un caractre d'chappement peut tre mis dans la mthode println(). J'en prote au passage pour vous mentionner deux autres caractres d'chappement : 18

VOTRE PREMIER PROGRAMME \r va insrer un retour chariot, parfois utilis aussi pour les retours la ligne ; \t va faire une tabulation.

Vous avez srement remarqu que la chane de caractres que l'on ache est entoure de "". En Java, les guillemets doubles 9 sont des dlimiteurs de chanes de caractres ! Si vous voulez acher un guillemet double dans la sortie standard, vous devrez l'chapper 10 avec un \, ce qui donnerait : System.out.println("Coucou mon \"chou\" ! ");.Je vous propose maintenant de passer un peu de temps sur la compilation de vos programmes en ligne de commande. Cette section n'est pas obligatoire, loin de l, mais elle ne peut tre qu'enrichissante.

Compilation en ligne de commande (Windows)Bienvenue donc aux plus curieux ! Avant de vous apprendre compiler et excuter un programme en ligne de commande, il va vous falloir le JDK (Java SE Development Kit). C'est avec celui-ci que nous aurons de quoi compiler nos programmes. Le ncessaire l'excution des programmes est dans le JRE. . . mais il est galement inclus dans le JDK. Je vous invite donc retourner sur le site d'Oracle et tlcharger ce dernier. Une fois cette opration eectue, il est conseill de mettre jour votre variable d'environnement %PATH%.

Euh. . . quoi ?Votre variable d'environnement. C'est grce elle que Windows trouve des excutables sans qu'il soit ncessaire de lui spcier le chemin d'accs complet. Vous enn, Windows en a plusieurs, mais nous ne nous intresserons qu' une seule. En gros, cette variable contient le chemin d'accs certains programmes. Par exemple, si vous spciez le chemin d'accs un programme X dans votre variable d'environnement et que, par un malheureux hasard, vous n'avez plus aucun raccourci vers X : vous l'avez dnitivement perdu dans les mandres de votre PC. Eh bien vous pourrez le lancer en faisant Dmarrer Excuter et en tapant la commande X.exe (en partant du principe que le nom de l'excutable est X.exe).

D'accord, mais comment fait-on ? Et pourquoi doit-on faire a pour le JDK ?9. Il n'est pas rare de croiser le terme anglais quote pour dsigner les guillemets droits. Cela fait en quelque sorte partie du jargon du programmeur. 10. Terme dsignant le fait de dsactiver : ici, dsactiver la fonction du caractre " .

19

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT J'y arrive. Une fois votre JDK install, ouvrez le rpertoire bin de celui-ci, ainsi que celui de votre JRE. Nous allons nous attarder sur deux chiers. Dans le rpertoire bin de votre JRE, vous devez avoir un chier nomm java.exe. Fichier que vous retrouvez aussi dans le rpertoire bin de votre JDK. C'est grce ce chier que votre ordinateur peut lancer vos programmes par le biais de la JVM. Le deuxime ne se trouve que dans le rpertoire bin de votre JDK, il s'agit de javac.exe 11 . C'est celui-ci qui va prcompiler vos programmes Java en byte code. Alors, pourquoi mettre jour la variable d'environnement pour le JDK ? Eh bien, compiler et excuter en ligne de commande revient utiliser ces deux chiers en leur prcisant o se trouvent les chiers traiter. Cela veut dire que si l'on ne met pas jour la variable d'environnement de Windows, il nous faudrait : ouvrir l'invite de commande ; se positionner dans le rpertoire bin de notre JDK ; appeler la commande souhaite ; prciser le chemin du chier .java ; renseigner le nom du chier. Avec notre variable d'environnement mise jour, nous n'aurons plus qu' : nous positionner dans le dossier de notre programme ; appeler la commande ; renseigner le nom du chier Java. Allez dans le Panneau de configuration de votre PC ; de l, cliquez sur l'icne Systme ; choisissez l'onglet Avanc et vous devriez voir en bas un bouton nomm Variables d'environnement : cliquez dessus. Une nouvelle fentre s'ouvre. Dans la partie infrieure intitule Variables systme , cherchez la variable Path. Une fois slectionne, cliquez sur Modifier . Encore une fois, une fentre, plus petite celle-ci, s'ouvre devant vous. Elle contient le nom de la variable et sa valeur.

Ne changez pas son nom et n'eacez pas son contenu ! Nous allons juste ajouter un chemin d'accs.Pour ce faire, allez jusqu'au bout de la valeur de la variable, ajoutez-y un point-virgule ( ;) s'il n'y en a pas, et ajoutez alors le chemin d'accs au rpertoire bin de votre JDK, en terminant celui-ci par un point-virgule ! Chez moi, a donne ceci : C:\Sun\SDK\jdk\bin . Auparavant, ma variable d'environnement contenait, avant mon ajout :7ystemoot7systemQPY7ystemoot7Y7ystemoot7ystemQPemY

Et maintenant :7ystemoot7systemQPY7ystemoot7Y7ystemoot7ystemQPemYgXunhujdkinY11.

Java compiler.

20

VOTRE PREMIER PROGRAMME Validez les changements : vous tes maintenant prts compiler en ligne de commande. Pour bien faire, allez dans le rpertoire de votre premier programme et eacez le .class. Ensuite, faites Dmarrer > Excuter 12 et tapez cmd .

Pour rappel, dans l'invite de commande, on se dplace de dossier en dossier grce l'instruction cd. cd : pour aller dans un dossier contenu dans celui dans lequel nous nous trouvons. cd .. : pour remonter d'un dossier dans la hirarchie.Par exemple, lorsque j'ouvre la console, je me trouve dans le dossier C:\toto\titi et mon application se trouve dans le dossier C:\sdz, je fais donc :d FF d FF d sdz

Aprs de la premire instruction, je me retrouve dans le dossier C:\toto. Grce la deuxime instruction, j'arrive la racine de mon disque. Via la troisime instruction, je me retrouve dans le dossier C:\sdz. Nous sommes maintenant dans le dossier contenant notre chier Java ! Cela dit, nous pouvions condenser cela en :d FFGFFGsdz

Maintenant, vous pouvez crer votre chier .class en excutant la commande suivante :jv `nomhepihierFjvb

Si, dans votre dossier, vous avez un chier test.java, compilez-le en faisant : javac test.java. Et si vous n'avez aucun message d'erreur, vous pouvez vrier que le chier test.class est prsent en utilisant l'instruction dir qui liste le contenu d'un rpertoire. Cette tape franchie, vous pouvez lancer votre programme Java en faisant ce qui suit :jv `nompihierglssnsixtensionb

Ce qui nous donne : java test. Et normalement, le rsultat de votre programme Java s'ache sous vos yeux bahis !

Attention : il ne faut pas mettre l'extension du chier pour le lancer, mais il faut la mettre pour le compiler.Donc voil : vous avez compil et excut un programme Java en ligne de commande. . . Vous avez pu voir qu'il n'y a rien de vraiment compliqu et, qui sait, vous en aurez peut-tre besoin un jour.12. Ou encore touche Windows + R.

21

CHAPITRE 1. INSTALLER LES OUTILS DE DVELOPPEMENT

En rsum La JVM est le cur de Java. Elle fait fonctionner vos programmes Java, prcompils en byte code. Les chiers contenant le code source de vos programmes Java ont l'extension .java. Les chiers prcompils correspondant vos codes source Java ont l'extension .class. Le byte code est un code intermdiaire entre celui de votre programme et celui que votre machine peut comprendre. Un programme Java, cod sous Windows, peut tre prcompil sous Mac et enn excut sous Linux. Votre machine ne peut pas comprendre le byte code, elle a besoin de la JVM. Tous les programmes Java sont composs d'au moins une classe. Le point de dpart de tout programme Java est la mthode public static void main(String[] args). On peut acher des messages dans la console grce ces instructions : System.out.println, qui ache un message avec un saut de ligne la n ; System.out.print, qui ache un message sans saut de ligne.

22

Chapitre

2Dicult :

Les variables et les oprateurs

N

ous commenons maintenant srieusement la programmation. Dans ce chapitre, nous allons dcouvrir les variables. On les retrouve dans la quasi-totalit des langages de programmation. Une variable est un lment qui stocke des informations de toute sorte en mmoire : des chires, des rsultats de calcul, des tableaux, des renseignements fournis par l'utilisateur. . . Vous ne pourrez pas programmer sans variables. Il est donc indispensable que je vous les prsente !

23

CHAPITRE 2. LES VARIABLES ET LES OPRATEURS

Les dirents types de variablesNous allons commencer par dcouvrir comment crer des variables dans la mmoire. Pour cela, il faut les dclarer. Une dclaration de variable se fait comme ceci : ; Cette opration se termine toujours par un point-virgule ( ; ) 1 . Ensuite, on l'initialise en entrant une valeur. En Java, nous avons deux types de variables : des variables de type simple ou primitif ; des variables de type complexe ou des objets . Ce qu'on appelle des types simples ou types primitifs, en Java, ce sont tout bonnement des nombres entiers, des nombres rels, des boolens ou encore des caractres, et vous allez voir qu'il y a plusieurs faons de dclarer certains de ces types.

Les variables de type numrique- Le type byte (1 octet) peut contenir les entiers entre 128 et +127.yte tempertureY temperture a TRY

- Le type short (2 octets) contient les entiers compris entre 32768 et +32767.short vitessewxY vitessewx a QPHHHY

- Le type int (4 octets) va de 2 109 2 109 (2 et 9 zros derrire. . . ce qui fait dj un joli nombre).int tempertureoleilY tempertureoleil a ISTHHHHHY

Remarquez qu'ici, la temprature est exprime en kelvins. - Le type long (8 octets) peut aller de 9 1018 9 1018 (encore plus gros. . .).long nneevumiereY nneevumiere a WRTHUHHHHHHHHHHHY

- Le type float (4 octets) est utilis pour les nombres avec une virgule ottante.flot piY pi a QFIRISWPTSQfY1. Comme toutes les instructions de ce langage.

24

LES DIFFRENTS TYPES DE VARIABLES Ou encore :flot nomreY nomre a PFHfY

Vous remarquerez que nous ne mettons pas une virgule, mais un point ! Et vous remarquerez aussi que mme si le nombre en question est rond, on crit .0 derrire celui-ci, le tout suivi de f .- Le type double (8 octets) est identique float, si ce n'est qu'il contient plus de chires derrire la virgule et qu'il n'a pas de suxe.doule divisionY division a HFQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRY

Nous avons aussi des variables stockant un caractre- Le type char contient UN caractre stock entre apostrophes ( ' ' ), comme ceci :hr rtereY rtere a 9e9Y

Des variables de type boolen- Le type boolean, lui, ne peut contenir que deux valeurs : true (vrai) ou false (faux), sans guillemets 2 .oolen questionY question a trueY

Et aussi le type StringLe type String permet de grer les chanes de caractres, c'est--dire le stockage de texte. Il s'agit d'une variable d'un type plus complexe que l'on appelle objet. Vous verrez que celle-ci s'utilise un peu diremment des variables prcdentes :tring phrseY phrse a 4iti et qrosminet4Y GGheuxime mthode de dlrtion de type tring tring str a new tring@AY str a 4ne utre hne de rtres4Y GGv troisime2. Ces valeurs sont natives dans le langage. Il les comprend directement et sait les interprter.

25

CHAPITRE 2. LES VARIABLES ET LES OPRATEURString string a 4ne utre hne4Y GGit une qutrime pour l route tring hine a new tring@4it une de plus 34AY

Attention : String commence par une majuscule ! Et lors de l'initialisation, on utilise ici des guillemets doubles ( " " ).Cela a t mentionn plus haut : String n'est pas un type de variable, mais un objet. Notre variable est un objet, on parle aussi d'une instance : ici, une instance de la classe String. Nous y reviendrons lorsque nous aborderons les objets.

On te croit sur parole, mais pourquoi String commence par une majuscule et pas les autres ?C'est simple : il s'agit d'une convention de nommage. En fait, c'est une faon d'appeler nos classes, nos variables, etc. Il faut que vous essayiez de la respecter au maximum. Cette convention, la voici : tous vos noms de classes doivent commencer par une majuscule ; tous vos noms de variables doivent commencer par une minuscule ; si le nom d'une variable est compos de plusieurs mots, le premier commence par une minuscule, le ou les autres par une majuscule, et ce, sans sparation ; tout ceci sans accentuation ! Je sais que la premire classe que je vous ai demand de crer ne respecte pas cette convention, mais je ne voulais pas vous en parler ce moment-l. . . Donc, prsent, je vous demanderai de ne pas oublier ces rgles ! Voici quelques exemples de noms de classes et de variables :puli lss oto{} puli lss xomre{} puli lss otoititi{} tring hineY tring hinehegrteresY int nomreY int nomrelusqrndY GGFFF

Donc, pour en revenir au pourquoi du comment, je vous ai dit que les variables de type String sont des objets. Les objets sont dnis par une ossature (un squelette) qui est en fait une classe. Ici, nous utilisons un objet String dni par une classe qui s'appelle String ; c'est pourquoi String a une majuscule et pas int, float, etc., qui eux ne sont pas dnis par une classe. 26

LES OPRATEURS ARITHMTIQUES

Chose importante : veillez bien respecter la casse (majuscules et minuscules), car une dclaration de CHAR la place de char ou autre chose provoquera une erreur, tout comme une variable de type string la place de String !Faites donc bien attention lors de vos dclarations de variables. . . Une petite astuce quand mme (enn deux, plutt) : on peut trs bien compacter les phases de dclaration et d'initialisation en une seule phase ! Comme ceci :int entier flot pi a hr r tring mot a QPY QFIRITfY a 9z9Y a new tring@4gouou4AY

Et lorsque nous avons plusieurs variables d'un mme type, nous pouvons rsumer tout ceci une dclaration :int nreI a PD nreP a QD nreQ a HY

Ici, toutes les variables sont des entiers, et toutes sont initialises. Avant de nous lancer dans la programmation, nous allons faire un peu de mathmatiques avec nos variables.

Les oprateurs arithmtiquesCe sont ceux que l'on apprend l'cole primaire. . . + : permet d'additionner deux variables numriques (mais aussi de concatner des chanes de caractres ! Ne vous inquitez pas, on aura l'occasion d'y revenir). - : permet de soustraire deux variables numriques. * : permet de multiplier deux variables numriques. / : permet de diviser deux variables numriques (mais je crois que vous aviez devin). % : permet de renvoyer le reste de la division entire de deux variables de type numrique ; cet oprateur s'appelle le modulo.

Quelques exemples de calculint nreID nrePD nreQY nreI nreP nreQ nreI nreP nreQ a a a a a a GGdlrtion des vriles I C QY GGnreI vut R P B TY GGnreP vut IP nreP G nreIY GGnreQ vut Q S 7 PY GGnreI vut ID r S a P B P C I WW 7 VY GGnreP vut QD r WW a V B IP C Q T 7 QY GGlD nreQ vut HD r il n9y ps de reste

27

CHAPITRE 2. LES VARIABLES ET LES OPRATEURS Ici, nous voyons bien que nous pouvons aecter des rsultats d'oprations sur des nombres nos variables, mais aussi aecter des rsultats d'oprations sur des variables de mme type.

Je me doute bien que le modulo est assez dicile assimiler. Voici une utilisation assez simple : pour vrier qu'un entier est pair, il sut de vrier que son modulo 2 renvoie 0.Maintenant, voici quelque chose que les personnes qui n'ont jamais programm ont du mal intgrer. Je garde la mme dclaration de variables que ci-dessus.int nreID nrePD nreQY nreI a nreP a nreQ a HY nreI a nreI a a P nreP a nreP a nreQ a nreQ a nreI a nreI a nreI C IY nreI C IY nreIY nreP B PY nrePY nreQ G nreQY nreQY nreI E IY GGdlrtion des vriles GGinitilistion

GGnreI a luiEmmeD don H C I ab nreI a I GGnreI a I @fF iEdessusAD mintenntD nreI a I C I GGnreP GGnreP GGnreQ GGnreQ GGnreI GGnreI a a a a a a nreI a P P ab nreP a P B P a R nreP a R R G R a I nreQ a I I E I a H

Et l aussi, il existe une syntaxe qui raccourcit l'criture de ce genre d'oprations. Regardez bien :nreI a nreI C IY nreI Ca IY nreICCY CCnreIY

Les trois premires syntaxes correspondent exactement la mme opration. La troisime sera certainement celle que vous utiliserez le plus, mais elle ne fonctionne que pour augmenter d'une unit la valeur de nbre1 ! Si vous voulez augmenter de 2 la valeur d'une variable, utilisez les deux syntaxes prcdentes. On appelle cette cela l'incrmentation. La dernire fait la mme chose que la troisime, mais il y a une subtilit dont nous reparlerons dans le chapitre sur les boucles. Pour la soustraction, la syntaxe est identique :nreI a nreI E IY nreI Ea IY nreIEEY EEnreIY

Mme commentaire que pour l'addition, sauf qu'ici, la troisime syntaxe s'appelle la dcrmentation. 28

LES OPRATEURS ARITHMTIQUES Les raccourcis pour la multiplication fonctionnent de la mme manire ; regardez plutt :nreI nreI nreI nreI a nreI B PY Ba PY a nreI G PY Ga PY

Trs important :

on ne peut faire du traitement arithmtique que sur des variables de mme type sous peine de perdre de la prcision lors du calcul. On ne s'amuse pas diviser un int par un float, ou pire, par un char ! Ceci est valable pour tous les oprateurs arithmtiques et pour tous les types de variables numriques. Essayez de garder une certaine rigueur pour vos calculs arithmtiques.

Voici les raisons de ma mise en garde. Comme je vous l'ai dit plus haut, chaque type de variable a une capacit dirente et, pour faire simple, nous allons comparer nos variables dirents rcipients. Une variable de type : byte correspondrait un d coudre, elle ne peut pas contenir grand-chose ; int serait un verre, c'est dj plus grand ; double serait un baril. Pou, on en met l-dedans. . . partir de l, ce n'est plus qu'une question de bon sens. Vous devez facilement constater qu'il est possible de mettre le contenu d'un d coudre dans un verre ou un baril. Par contre, si vous versez le contenu d'un baril dans un verre. . . il y en a plein par terre ! Ainsi, si nous aectons le rsultat d'une opration sur deux variables de type double dans une variable de type int, le rsultat sera de type int et ne sera donc pas un rel mais un entier. Pour acher le contenu d'une variable dans la console, appelez l'instruction System.out.println(maVariable);, ou encore System.out.print(maVariable);. Je suppose que vous voudriez aussi mettre du texte en mme temps que vos variables. . . Eh bien sachez que l'oprateur + sert aussi d'oprateur de concatnation, c'est--dire qu'il permet de mlanger du texte brut et des variables. Voici un exemple d'achage avec une perte de prcision :doule nreI a IHD nreP a QY int resultt a @intA@nreI G nrePAY ystemFoutFprintln@4ve rsultt est a 4 C resulttAY

Sachez aussi que vous pouvez tout fait mettre des oprations dans un achage, comme ceci : System.out.print("Rsultat = " + nbre1/nbre2); (le plus joue ici le rle d'oprateur de concatnation) ; ceci vous permet d'conomiser une variable et par consquent de la mmoire.29

CHAPITRE 2. LES VARIABLES ET LES OPRATEURS Cependant, pour le bien de ce chapitre, nous n'allons pas utiliser cette mthode. Vous allez constater que le rsultat ach est 3 au lieu de 3.33333333333333. . . Et je pense que ceci vous intrigue : int resultat = (int)(nbre1 / nbre2);. Avant que je ne vous explique, remplacez la ligne cite ci-dessus par : int resultat = nbre1 / nbre2;. Vous allez voir qu'Eclipse n'aime pas du tout ! Pour comprendre cela, nous allons voir les conversions.

Les conversions, ou cast Comme expliqu plus haut, les variables de type double contiennent plus d'informations que les variables de type int. Ici, il va falloir couter comme il faut. . . heu, pardon : lire comme il faut ! Nous allons voir un truc super important en Java. Ne vous en dplaise, vous serez amens convertir des variables. D'un type int en type float :int i a IPQY flot j a @flotAiY

D'un type int en double :int i a IPQY doule j a @douleAiY

Et inversement :doule i a IFPQY doule j a PFWWWWWWWY int k a @intAiY GGk vut I k a @intAjY GGk vut P

Ce type de conversion s'appelle une conversion d'ajustement, ou cast de variable. Vous l'avez vu : nous pouvons passer directement d'un type int un type double. L'inverse, cependant, ne se droulera pas sans une perte de prcision. En eet, comme vous avez pu le constater, lorsque nous castons un double en int, la valeur de ce double est tronque, ce qui signie que l'int en question ne prendra que la valeur entire du double, quelle que soit celle des dcimales. Pour en revenir notre problme de tout l'heure, il est aussi possible de caster le rsultat d'une opration mathmatique en la mettant entre () et en la prcdant du type de cast souhait. Donc : 30

LES CONVERSIONS, OU CAST doule nreI a IHD nreP a QY int resultt a @intA@nreI G nrePAY ystemFoutFprintln@4ve rsultt est a 4 C resulttAY

Voil qui fonctionne parfaitement. Pour bien faire, vous devriez mettre le rsultat de l'opration en type double. Et si on fait l'inverse : si nous dclarons deux entiers et que nous mettons le rsultat dans un double ? Voici une possibilit :int nreI a QD nreP a PY doule resultt a nreI G nrePY ystemFoutFprintln@4ve rsultt est a 4 C resulttAY

Vous aurez 1 comme rsultat. Je ne caste pas ici, car un double peut contenir un int. En voici une autre :int nreI a QD nreP a PY doule resultt a @douleA@nreI G nrePAY ystemFoutFprintln@4ve rsultt est a 4 C resulttAY

Idem. . . An de comprendre pourquoi, vous devez savoir qu'en Java, comme dans d'autres langages d'ailleurs, il y a la notion de priorit d'opration ; et l, nous en avons un trs bon exemple !

Sachez que l'aectation, le calcul, le cast, le test, l'incrmentation. . . toutes ces choses sont des oprations ! Et Java les fait dans un certain ordre, il y a des priorits.Dans le cas qui nous intresse, il y a trois oprations : un calcul ; un cast sur le rsultat de l'opration ; une aectation dans la variable resultat. Eh bien, Java excute notre ligne dans cet ordre ! Il fait le calcul (ici 3/2), il caste le rsultat en double, puis il l'aecte dans notre variable resultat. Vous vous demandez srement pourquoi vous n'avez pas 1.5. . . C'est simple : lors de la premire opration de Java, la JVM voit un cast eectuer, mais sur un rsultat de calcul. La JVM fait ce calcul (division de deux int qui, ici, nous donne 1), puis le cast (toujours 1), et aecte la valeur la variable (encore et toujours 1). Donc, pour avoir un rsultat correct, il faudrait caster chaque nombre avant de faire l'opration, comme ceci :int nreI a QD nreP a PY doule resultt a @douleA@nreIA G @douleA@nrePAY ystemFoutFprintln@4ve rsultt est a 4 C resulttAY GGffihe X ve rsultt est a IFS

31

CHAPITRE 2. LES VARIABLES ET LES OPRATEURS Je ne vais pas trop dtailler ce qui suit 3 ; mais vous allez maintenant apprendre transformer l'argument d'un type donn, int par exemple, en String.int i a IPY tring j a new tring@AY j a jFvlueyf@iAY

j est donc une variable de type String contenant la chane de caractres 12. Sachez que

ceci fonctionne aussi avec les autres types numriques. Voyons maintenant comment faire marche arrire en partant de ce que nous venons de faire.int i a IPY tring j a new tring@AY j a jFvlueyf@iAY int k a sntegerFvlueyf@jAFintlue@AY

Maintenant, la variable k de type int contient le nombre 12.

Il existe des quivalents intValue() pour les autres types numriques : floatValue(), doubleValue(). . .

En rsum Les variables sont essentielles dans la construction de programmes informatiques. On aecte une valeur dans une variable avec l'oprateur gal ( = ). Aprs avoir aect une valeur une variable, l'instruction doit se terminer par un point-virgule ( ; ). Vos noms de variables ne doivent contenir ni caractres accentus ni espaces et doivent, dans la mesure du possible, respecter la convention de nommage Java. Lorsque vous eectuez des oprations sur des variables, prenez garde leur type : vous pourriez perdre en prcision. Vous pouvez caster un rsultat en ajoutant un type devant celui-ci : (int), (double), etc. Prenez garde aux priorits lorsque vous castez le rsultat d'oprations, faute de quoi ce dernier risque d'tre incorrect.

3. Vous verrez cela plus en dtail dans la partie sur la programmation oriente objet.

32

Chapitre

3Dicult :

Lire les entres clavier

A

prs la lecture de ce chapitre, vous pourrez saisir des informations et les stocker dans des variables an de pouvoir les utiliser a posteriori. En fait, jusqu' ce que nous voyions les interfaces graphiques, nous travaillerons en mode console. Donc, an de rendre nos programmes plus ludiques, il est de bon ton de pouvoir interagir avec ceux-ci. Par contre, ceci peut engendrer des erreurs (on parlera d'exceptions, mais ce sera trait plus loin). An de ne pas surcharger le chapitre, nous survolerons ce point sans voir les dirents cas d'erreurs que cela peut engendrer.

33

CHAPITRE 3. LIRE LES ENTRES CLAVIER

La classe ScannerJe me doute qu'il vous tardait de pouvoir communiquer avec votre application. . . Le moment est enn venu ! Mais je vous prviens, la mthode que je vais vous donner prsente des failles. Je vous fais conance pour ne pas rentrer n'importe quoi n'importe quand. . . Je vous ai dit que vos variables de type String sont en ralit des objets de type String. Pour que Java puisse lire ce que vous tapez au clavier, vous allez devoir utiliser un objet de type Scanner. Cet objet peut prendre dirents paramtres, mais ici nous n'en utiliserons qu'un : celui qui correspond l'entre standard en Java. Lorsque vous faites System.out.println();, je vous rappelle que vous appliquez la mthode println() sur la sortie standard ; ici, nous allons utiliser l'entre standard System.in. Donc, avant d'indiquer Java qu'il faut lire ce que nous allons taper au clavier, nous devrons instancier un objet Scanner. Avant de vous expliquer ceci, crez une nouvelle classe et tapez cette ligne de code dans votre mthode main :nner s a new nner@ystemFinAY

Vous devez avoir une jolie vague rouge sous le mot Scanner. Cliquez sur la croix rouge sur la gauche et faites un double-clic sur Import 'Scanner' java.util (gure 3.1). Et l, l'erreur disparat !

Figure

3.1 Importer la classe Scanner

Maintenant, regardez au-dessus de la dclaration de votre classe, vous devriez voir cette ligne :import jvFutilFnnerY

Voil ce que nous avons fait. Je vous ai dit qu'il fallait indiquer Java o se trouve la classe Scanner. Pour faire ceci, nous devons importer la classe Scanner grce l'instruction import. La classe que nous voulons se trouve dans le package java.util. Un package est un ensemble de classes. En fait, c'est un ensemble de dossiers et de sous-dossiers contenant une ou plusieurs classes, mais nous verrons ceci plus en dtail lorsque nous ferons nos propres packages. Les classes qui se trouvent dans les packages autres que java.lang 1 sont importer la main dans vos classes Java pour pouvoir vous en servir. La faon dont nous avons1. Package automatiquement import par Java. On y trouve entre autres la classe System.

34

RCUPRER CE QUE VOUS TAPEZ import la classe java.util.Scanner dans Eclipse est trs commode. Vous pouvez aussi le faire manuellement :GGgei import GGgei import importe l lsse nner du pkge jvFutil jvFutilFnnerY importe toutes les lsses du pkge jvFutil jvFutilFBY

Rcuprer ce que vous tapezVoici l'instruction pour permettre Java de rcuprer ce que vous avez saisi pour ensuite l'acher :nner s a new nner@ystemFinAY ystemFoutFprintln@4euillez sisir un mot X4AY tring str a sFnextvine@AY ystemFoutFprintln@4ous vez sisi X 4 C strAY

Une fois l'application lance, le message que vous avez crit auparavant s'ache dans la console, en bas d'Eclipse. Pensez cliquer dans la console an que ce que vous saisissez y soit crit et que Java puisse rcuprer ce que vous avez inscrit (gure 3.2) !

Figure

3.2 Saisie utilisateur dans la console

Si vous remplacez la ligne de code qui rcupre une chane de caractres comme suit :nner s a new nner@ystemFinAY ystemFoutFprintln@4euillez sisir un nomre X4AY int str a sFnextsnt@AY ystemFoutFprintln@4ous vez sisi le nomre X 4 C strAY

. . . vous devriez constater que lorsque vous introduisez votre variable de type Scanner et que vous introduisez le point permettant d'appeler des mthodes de l'objet, Eclipse vous propose une liste de mthodes associes cet objet 2 ; de plus, lorsque vous commencez taper le dbut de la mthode nextInt(), le choix se restreint jusqu' ne laisser que cette seule mthode. Excutez et testez ce programme : vous verrez qu'il fonctionne la perfection. Sauf. . . si vous saisissez autre chose qu'un nombre entier !2. Ceci s'appelle l'autocompltion.

35

CHAPITRE 3. LIRE LES ENTRES CLAVIER Vous savez maintenant que pour lire un int, vous devez utiliser nextInt(). De faon gnrale, dites-vous que pour rcuprer un type de variable, il vous sut d'appeler next 3 .nner s a new nner@ystemFinAY int i a sFnextsnt@AY doule d a sFnexthoule@AY long l a sFnextvong@AY yte a sFnextfyte@AY GGitF

la classe Scanner : il s'agit du type char. Voici comment on pourrait rcuprer un caractre :ystemFoutFprintln@4isissez une lettre X4AY nner s a new nner@ystemFinAY tring str a sFnextvine@AY hr r a strFhret@HAY ystemFoutFprintln@4ous vez sisi le rtre X 4 C rAY

Attention : il y a un type de variables primitives qui n'est pas pris en compte par

Qu'avons-nous fait ici ? Nous avons rcupr une chane de caractres, puis utilis une mthode de l'objet String (ici, charAt(0) ) an de rcuprer le premier caractre saisi. Mme si vous tapez une longue chane de caractres, l'instruction charAt(0) 4 ne renverra que le premier caractre. Jusqu' ce qu'on aborde les exceptions, je vous demanderai d'tre rigoureux et de faire attention ce que vous attendez comme type de donnes an d'utiliser la mthode correspondante. Une prcision s'impose, toutefois : la mthode nextLine() rcupre le contenu de toute la ligne saisie et replace la tte de lecture au dbut d'une autre ligne. Par contre, si vous avez invoqu une mthode comme nextInt(), nextDouble() et que vous invoquez directement aprs la mthode nextLine(), celle-ci ne vous invitera pas saisir une chane de caractres : elle videra la ligne commence par les autres instructions. En eet, celles-ci ne repositionnent pas la tte de lecture, l'instruction nextLine() le fait leur place. Pour faire simple, ceci :import jvFutilFnnerY puli lss win { puli stti void min@tring rgsA{ nner s a new nner@ystemFinAY ystemFoutFprintln@4isissez un entier X 4AY int i a sFnextsnt@AY ystemFoutFprintln@4isissez une hne X 4AY tring str a sFnextvine@AY3. Rappelez-vous de la convention de nommage Java ! 4. Vous devez vous demander pourquoi charAt(0) et non charAt(1) : nous aborderons ce point lorsque nous verrons les tableaux. . .

36

RCUPRER CE QUE VOUS TAPEZystemFoutFprintln@4psx 3 4AY

}

}

. . . ne vous demandera pas de saisir une chane et achera directement Fin . Pour pallier ce problme, il sut de vider la ligne aprs les instructions ne le faisant pas automatiquement :import jvFutilFnnerY puli lss win { puli stti void min@tring rgsA{ nner s a new nner@ystemFinAY ystemFoutFprintln@4isissez un entier X 4AY int i a sFnextsnt@AY ystemFoutFprintln@4isissez une hne X 4AY GGyn vide l ligne vnt d9en lire une utre sFnextvine@AY tring str a sFnextvine@AY ystemFoutFprintln@4psx 3 4AY } }

En rsum La lecture des entres clavier se fait via l'objet Scanner. Ce dernier se trouve dans le package java.util que vous devrez importer. Pour pouvoir rcuprer ce vous allez taper dans la console, vous devrez initialiser l'objet Scanner avec l'entre standard, System.in. Il y a une mthode de rcupration de donnes pour chaque type (sauf les char) : nextLine() pour les String, nextInt() pour les int. . .

37

CHAPITRE 3. LIRE LES ENTRES CLAVIER

38

Chapitre

4Dicult :

Les conditions

N

ous abordons ici l'un des chapitres les plus importants : les conditions sont une autre notion fondamentale de la programmation. En eet, ce qui va tre dvelopp ici s'applique normment de langages de programmation, et pas seulement Java. Dans une classe, la lecture et l'excution se font de faon squentielle, c'est--dire ligne par ligne. Avec les conditions, nous allons pouvoir grer dirents cas de gure sans pour autant lire tout le code. Vous vous rendrez vite compte que tous vos projets ne sont que des enchanements et des imbrications de conditions et de boucles (notion que l'on abordera au chapitre suivant). Assez de belles paroles ! Entrons tout de suite dans le vif du sujet.

39

CHAPITRE 4. LES CONDITIONS

La structure if... elseAvant de pouvoir crer et valuer des conditions, vous devez savoir que pour y parvenir, nous allons utiliser ce qu'on appelle des oprateurs logiques. Ceux-ci sont surtout utiliss lors de conditions (si [test] alors [faire ceci]) pour valuer dirents cas possibles. Voici les dirents oprateurs connatre : == : permet de tester l'galit. != : permet de tester l'ingalit. < : strictement infrieur. : strictement suprieur. >= : suprieur ou gal. && : l'oprateur et. Il permet de prciser une condition. || : le ou. Mme combat que le prcdent. ? : : l'oprateur ternaire. Pour celui-ci, vous comprendrez mieux avec un exemple qui sera donn vers la n de ce chapitre. Comme je vous l'ai dit dans le chapitre prcdent, les oprations en Java sont soumises des priorits. Tous ces oprateurs se plient cette rgle, de la mme manire que les oprateurs arithmtiques. . . Imaginons un programme qui demande un utilisateur d'entrer un nombre entier relatif (qui peut tre soit ngatif, soit nul, soit positif). Les structures conditionnelles vont nous permettre de grer ces trois cas de gure. La structure de ces conditions ressemble a :if@GGonditionA { FFF GGixution des instrutions si l ondition est remplie } else { FFF GGixution des instrutions si l ondition n9est ps remplie }

Cela peut se traduire par si. . . sinon. . . . Le rsultat de l'expression value par l'instruction if sera un boolean, donc soit true, soit false. La portion de code du bloc if ne sera excute que si la condition est remplie. Dans le cas contraire, c'est le bloc de l'instruction else qui le sera. Mettons notre petit exemple en pratique :int i a IHY if @i ` HA ystemFoutFprintln@4le nomre est ngtif4AY else ystemFoutFprintln@4le nomre est positif4AY

Essayez ce petit code, et vous verrez comment il fonctionne. Dans ce cas, notre classe ache que le nombre est positif . Expliquons un peu ce qui se passe. 40

LA STRUCTURE IF... ELSE Dans un premier temps, la condition du if est teste (elle dit si i est strictement infrieur 0). . . Dans un second temps, vu que celle-ci est fausse, le programme excute le else.

Attends un peu ! Lorsque tu nous as prsent la structure des conditions, tu as mis des accolades et l, tu n'en mets pas. . .Bien observ. En fait, les accolades sont prsentes dans la structure normale des conditions, mais lorsque le code l'intrieur de l'une d'entre elles n'est compos que d'une seule ligne, les accolades deviennent facultatives. Comme nous avons l'esprit perfectionniste, nous voulons que notre programme ache le nombre est nul lorsque i est gal 0 ; nous allons donc ajouter une condition. Comment faire ? La condition du if est remplie si le nombre est strictement ngatif, ce qui n'est pas le cas ici puisque nous allons le mettre 0. Le code contenu dans la clause else est donc excut si le nombre est gal ou strictement suprieur 0. Il nous sut d'ajouter une condition l'intrieur de la clause else, comme ceci :int i a HY if @i ` HA { ystemFoutFprintln@4ge nomre est ngtif 34AY } else { if@i aa HA ystemFoutFprintln@4ge nomre est nul 34AY else } ystemFoutFprintln@4ge nomre est positif 34AY

Maintenant que vous avez tout compris, je vais vous prsenter une autre faon d'crire ce code, avec le mme rsultat : on ajoute juste un petit sinon si.int i a HY if @i ` HA ystemFoutFprintln@4ge nomre est ngtif 34AY else if@i b HA ystemFoutFprintln@4ge nomre est positif 34AY else ystemFoutFprintln@4ge nomre est nul 34AY

Alors ? Explicite, n'est-ce pas ? 41

CHAPITRE 4. LES CONDITIONS i est strictement ngatif excution du code. i est strictement positif excution du code. sinon i est forcment nul excution du code.si sinon si

Il faut absolument donner une condition au else

if

pour qu'il fonctionne.

Ici, je vais trs fortement insister sur un point : regardez l'achage du code et remarquez le petit dcalage entre le test et le code excuter. On appelle cela l'indentation ! Pour vous reprer dans vos futurs programmes, cela sera trs utile. Imaginez deux secondes que vous avez un programme de 700 lignes avec 150 conditions, et que tout est crit le long du bord gauche. Il sera dicile de distinguer les tests du code. Vous n'tes pas obligs de le faire, mais je vous assure que vous y viendrez.

Avant de passer la suite, vous devez savoir qu'on ne peut pas tester l'galit de chanes de caractres ! Du moins, pas comme je vous l'ai montr ci-dessus. Nous aborderons ce point plus tard.

Les conditions multiplesDerrire ce nom barbare se cachent simplement plusieurs tests dans une instruction if (ou else if). Nous allons maintenant utiliser les oprateurs logiques que nous avons vus au dbut en vriant si un nombre donn appartient un intervalle connu. Par exemple, on va vrier si un entier est compris entre 50 et 100.int i a SVY if@i ` IHH 88 i b SHA ystemFoutFprintln@4ve nomre est ien dns l9intervlleF4AY else ystemFoutFprintln@4ve nomre n9est ps dns l9intervlleF4AY

Nous avons utilis l'oprateur &&. La condition de notre if est devenue : si i est infrieur 100 et suprieur 50, alors la condition est remplie.

Avec l'oprateur &&, la clause est remplie si et seulement si les conditions la constituant sont toutes remplies ; si l'une des conditions n'est pas vrie, la clause sera considre comme fausse.Cet oprateur vous initie la notion d'intersection d'ensembles. Ici, nous avons deux conditions qui dnissent un ensemble chacune : i < 100 dnit l'ensemble des nombres infrieurs 100 ; i > 50 dnit l'ensemble des nombres suprieurs 50. 42

LA STRUCTURE SWITCH L'oprateur && permet de faire l'intersection de ces ensembles. La condition regroupe donc les nombres qui appartiennent ces deux ensembles, c'est--dire les nombres de 51 99 inclus. Rchissez bien l'intervalle que vous voulez dnir. Voyez ce code :int i a SVY if@i ` IHH 88 i b IHHA ystemFoutFprintln@4ve nomre est ien dns l9intervlleF4AY else ystemFoutFprintln@4ve nomre n9est ps dns l9intervlleF4AY

Ici, la condition ne sera jamais remplie, car je ne connais aucun nombre qui soit la fois plus petit et plus grand que 100 ! Reprenez le code prcdent et remplacez l'oprateur && par || 1 . l'excution du programme et aprs plusieurs tests de valeur pour i, vous pourrez vous apercevoir que tous les nombres remplissent cette condition, sauf 100.

La structure switchLe switch est surtout utilis lorsque nous voulons des conditions la carte . Prenons l'exemple d'une interrogation comportant deux questions : pour chacune d'elles, on peut obtenir uniquement 0 ou 10 points, ce qui nous donne au nal trois notes et donc trois apprciations possibles, comme ceci. 0/20 : tu peux revoir ce chapitre, petit Zro ! 10/20 : je crois que tu as compris l'essentiel ! Viens relire ce chapitre l'occasion. 20/20 : bravo ! Dans ce genre de cas, on utilise un switch pour viter des else if rptition et pour allger un peu le code. Je vais vous montrer comment se construit une instruction switch ; puis nous allons l'utiliser tout de suite aprs.

Syntaxeswith @GBrileBGA { se GBergumentBGX GBetionBGY rekY defultX GBetionBGY }

Voici les oprations qu'eectue cette expression. La classe value l'expression gurant aprs le switch (ici /*Variable*/). Si la premire languette (case /*Valeur possible de la variable*/:) correspond la valeur de /*Variable*/, l'instruction gurant dans celle-ci sera excute.1. Petit rappel, il s'agit du ou.

43

CHAPITRE 4. LES CONDITIONS Sinon, on passe la languette suivante, et ainsi de suite. Si aucun des cas ne correspond, la classe va excuter ce qui se trouve dans l'instruction default:/*Action*/;. Voyez ceci comme une scurit. Notez bien la prsence de l'instruction break;. Elle permet de sortir du switch si une languette correspond 2 . Voici un exemple de switch que vous pouvez essayer :int note a IHY GGyn imgine que l note mximle est PH swith @noteA { se HX ystemFoutFprintln@4yuh 34AY rekY se IHX ystemFoutFprintln@4ous vez juste l moyenneF4AY rekY se PHX ystemFoutFprintln@4rfit 34AY rekY defultX ystemFoutFprintln@4sl fut dvntge trvillerF4AY }

Je n'ai crit qu'une ligne de code par instruction empche d'en mettre plusieurs.

case,

mais rien ne vous

Si vous avez essay ce programme en supprimant l'instruction break;, vous avez d vous rendre compte que le switch excute le code contenu dans le case 10:, mais aussi dans tous ceux qui suivent ! L'instruction break; permet de sortir de l'opration en cours. Dans notre cas, on sort de l'instruction switch, mais nous verrons une autre utilit break; dans le chapitre suivant.

L'instruction switch ne prend que des entiers ou des caractres en paramtre. Il est important de le remarquer.

La condition ternaireLes conditions ternaires sont assez complexes et relativement peu utilises. Je vous les prsente ici titre indicatif.2. Pour mieux juger de l'utilit de cette instruction, enlevez tous les break; et compilez votre programme. Vous verrez le rsultat. . .

44

LA CONDITION TERNAIRE La particularit des conditions ternaires rside dans le fait que trois oprandes (c'est-dire des variables ou des constantes) sont mis en jeu, mais aussi que ces conditions sont employes pour aecter des donnes une variable. Voici quoi ressemble la structure de ce type de condition :int x a IHD y a PHY int mx a @x ` yA c y X x Y GGwintenntD mx vut PH

Dcortiquons ce qu'il se passe. Nous cherchons aecter une valeur notre variable max, mais de l'autre ct de l'oprateur d'aectation se trouve une condition ternaire. . . Ce qui se trouve entre les parenthses est valu : x est-il plus petit que y ? Donc, deux cas de gure se prolent l'horizon : si la condition renvoie true (vrai), qu'elle est vrie, la valeur qui se trouve aprs le ? sera aecte ; sinon, la valeur se trouvant aprs le symbole : sera aecte. L'aectation est eective : vous pouvez utiliser votre variable max. Vous pouvez galement faire des calculs (par exemple) avant d'aecter les valeurs :int x a IHD y a PHY int mx a @x ` yA c y B P X x B P Y GGsiD mx vut P B PH don RH

N'oubliez pas que la valeur que vous allez aecter votre variable doit tre du mme type que votre variable. Sachez aussi que rien ne vous empche d'insrer une condition ternaire dans une autre condition ternaire :int x a IHD y a PHY int mx a @x ` yA c @y ` IHA c y 7 IH X y B P X x Y GGwx vut RH GGs trs file lireFFF GGous pouvez entourer votre deuxime instrution ternire GGde prenthses pour mieux voir mx a @x ` yA c @@y ` IHA c y 7 IH X y B PA X x Y GGwx vut RH

En rsum Les conditions vous permettent de n'excuter que certains morceaux de code. Il existe plusieurs sortes de structures conditionnelles : la structure if... elseif... else ; la structure switch... case... default ; la structure ? :. Si un bloc d'instructions contient plus d'une ligne, vous devez l'entourer d'accolades an de bien en dlimiter le dbut et la n. Pour pouvoir mettre une condition en place, vous devez comparer des variables l'aide d'oprateurs logiques. 45

CHAPITRE 4. LES CONDITIONS Vous pouvez mettre autant de comparaisons renvoyant un boolean que vous le souhaitez dans une condition. Pour la structure switch, pensez mettre les instructions break; si vous ne souhaitez excuter qu'un seul bloc case.

46

Chapitre

5Dicult :

Les boucles

L

e rle des boucles est de rpter un certain nombre de fois les mmes oprations. Tous les programmes, ou presque, ont besoin de ce type de fonctionnalit. Nous utiliserons les boucles pour permettre un programme de recommencer depuis le dbut, pour attendre une action prcise de l'utilisateur, parcourir une srie de donnes, etc. Une boucle s'excute tant qu'une condition est remplie. Nous rutiliserons donc des notions du chapitre prcdent !

47

CHAPITRE 5. LES BOUCLES

La boucle whileDcortiquons prcisment ce qui se passe dans une boucle. Pour ce faire, nous allons voir comment elle se construit. Une boucle commence par une dclaration : ici while. Cela veut dire, peu de chose prs, tant que . Puis nous avons une condition : c'est elle qui permet la boucle de s'arrter. Une boucle n'est utile que lorsque nous pouvons la contrler, et donc lui faire rpter une instruction un certain nombre de fois. C'est a que servent les conditions. Ensuite nous avons une ou plusieurs instructions : c'est ce que va rpter notre boucle 1 !while @GB gondition BGA { GGsnstrutions rpter }

Un exemple concret tant toujours le bienvenu, en voici un. . . D'abord, rchissons comment notre boucle va travailler . Pour cela, il faut dterminer notre exemple. Nous allons acher Bonjour, , prnom qu'il faudra taper au clavier ; puis nous demanderons si l'on veut recommencer. Pour cela, il nous faut une variable qui va recevoir le prnom, donc dont le type sera String, ainsi qu'une variable pour rcuprer la rponse. Et l, plusieurs choix s'orent nous : soit un caractre, soit une chane de caractres, soit un entier. Ici, nous prendrons une variable de type char. C'est parti !GGne vrile vide tring prenomY GGyn initilise elleEi y pour oui hr reponse a 9y9Y GGxotre ojet nnerD n9ouliez ps l9import de jvFutilFnner 3 nner s a new nner@ystemFinAY GGnt que l rponse donne est gle ouiFFF while @reponse aa 9y9A { GGyn ffihe une instrution ystemFoutFprintln@4honnez un prnom X 4AY GGyn rupre le prnom sisi prenom a sFnextvine@AY GGyn ffihe notre phrse ve le prnom ystemFoutFprintln@4fonjour 4 CprenomC 4D omment vsEtu c4AY GGyn demnde si l personne veut fire un utre essi ystemFoutFprintln@4oulezEvous ressyer c @yGxA4AY GGyn rupre l rponse de l9utilisteur reponse a sFnextvine@AFhret@HAY }1. Il peut mme y avoir des boucles dans une boucle.

48

LA BOUCLE WHILE

ystemFoutFprintln@4eu revoirFFF4AY GGpin de l oule

Vous avez d cligner des yeux en lisant reponse = sc.nextLine().charAt(0); . Rappelez-vous comment on rcupre un char avec l'objet Scanner : nous devons rcuprer un objet String et ensuite prendre le premier caractre de celui-ci ! Eh bien cette syntaxe e