You are on page 1of 59

Universit Pierre et Marie Curie

La programmation Java : aide mmoire


M2 dInformatique Mdicale 2013 - 2014

Vincent Morice

Mise jour : 6 septembre 2013

2/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Table des matires

Table des matires


3 7 7 7 7 8 9 9 9 9 10 10 11 12 15 15 15 15 16 17 18 18 18 19 22 23 25 25 25 27 28 29 29 29

Table des matires Chapitre 1 :


1.1 1.1.1 1.1.2 1.1.3 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3

Introduction Java

La programmation objet Classes et instances Composition, hritage, polymorphisme Contrle daccs aux membres des objets Java et linternet Lorigine de Java Programmation ct client : les applets Java ct serveur Installation de Java Installation partir du site de Sun Microsystems Chemins daccs et commandes Documentation sur les classes prdfinies

Chapitre 2 :
2.1 2.2 2.2.1 2.2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.6

Les objets en Java

Un objet se manipule par un pointeur Cration dun objet Mthode gnrale Les types lmentaires Destruction dun objet Cration dune classe Structure gnrale Les membres champs de donnes Les membres mthodes Un programme lmentaire Transformation en applet

Chapitre 3 :
3.1 3.2 3.3 3.4 3.5 3.5.1 3.5.2

Oprateurs et structures de contrle

Laffectation Oprateurs et fonctions mathmatiques Oprateurs de comparaison et expressions logiques Loprateur + pour les chanes de caractres Instructions conditionnelles Linstruction if Linstruction switch

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

3/59

Table des matires 30 30 31 32 33

3.6 3.6.1 3.6.2 3.6.3

Instructions ditration Instruction while Instruction do-while Instruction for

Chapitre 4 :
4.1 4.1.1 4.1.2 4.2 4.3 4.4

Relations entre classes : packages, hritage, classes internes

33 33 34 34 35 35 37 37 38 41 41 41 42 43 45 45 45 45 47 49 49 50 53 53 53 55 56 56

Les packages Accs un package Cration dun package Lhritage Les interfaces Les classes internes

Chapitre 5 :
5.1 5.2

Tableaux et chanes de caractres

Les tableaux Les chanes de caractres

Chapitre 6 :
6.1 6.2 6.3 6.4

Traitement des erreurs : les exceptions

Principe La hirarchie des exceptions Syntaxe Crer ses propres exceptions

Chapitre 7 :
7.1 7.2 7.2.1 7.2.2 7.3 7.3.1 7.3.2

Les entres-sorties

Principe gnral Streams pour donnes binaires Streams dentre Streams de sortie Streams pour donnes textuelles Streams dentre Streams de sortie

Chapitre 8 :
8.1 8.2 8.3 8.4 8.4.1

Applets et fentres

Les applets Les composants graphiques Afficher des lments graphiques Les vnements Le modle

4/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Table des matires 56

8.4.2

Elments graphiques et vnements

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

5/59

Table des matires

6/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Introduction Java

Chapitre 1 Introduction Java


Ce cours sinspire largement des livres de Bruce Eckel Thinking in Java , disponible en ligne et en franais sur http://bruce-eckel.developpez.com/livres/java/traduction/tij2/ et de Antoine Mirecourt et Pierre-Yves Saumont Le dveloppeur Java2 , collection Eyrolles (voir http:// www.eyrolles.com). Voir aussi Java in a nutshell. Manuel de rfrence pour Java2 de David Flanagan, collection OReilly.

1.1 La programmation objet


1.1.1 Classes et instances
Un objet se dfinit par son contenu et ce quil sait faire. Comme une structure de C ou de PASCAL, il possde un certain nombre de champs ou membres. Certains des champs mmorisent des donnes, dautres des comportements sous forme de fonctions ou de mthodes. Pour pouvoir crer un objet, il faut dabord dcrire sa structure par la cration dun nouveau type dobjet appel classe dobjets. Lorsquune classe est dfinie, on peut crer autant dobjets de cette classe ou structure quon le dsire. Ces objets sont appels les instances de la classe. La cration dune instance se fait par lappel un constructeur dobjet qui doit en particulier allouer une zone de mmoire de taille adapte lobjet. Lorsque lobjet devient inutile se pose le problme de rcuprer la mmoire correspondante : Java dispose dun garbage collector qui dtermine dynamiquement quand un objet nest plus utilis et rcupre la mmoire quil occupait.

1.1.2 Composition, hritage, polymorphisme


La mthode la plus simple de rutilisation de classes existantes est la composition ou dpendance. Tout champ de donnes dune classe peut tre dfini par un objet dune autre classe. Les champs et mthodes de cet objet sont alors automatiquement intgrs parmi ceux de la classe initiale. La seconde mthode est lhritage. Un objet qui hrite dun autre en aura toutes ses caractris-

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

7/59

Introduction Java

tiques (sauf celles dclares prives), aux prcisions ou modifications prs quon jugera utile de lui apporter. Une classe fille peut se diffrencier de sa parente par ajout de nouveaux membres (on dit quelle tend (extends) sa parente) ; ou par remplacement de certains membres, en particulier de mthodes. Lorsquune classe fille redfinit une mthode de sa parente, Java sait choisir la mthode la plus adapte excuter selon le contexte. Si la mthode est utilise sur un objet instance de la classe fille, cest la mthode la plus spcifique qui est excute. Sinon, cest la mthode la plus gnrale. Cette facult dadaptation est appele polymorphisme. Elle requiert un binding dynamique entre le nom dune fonction appele et la fonction elle-mme. Java nautorise pas lhritage multiple, cest dire la possibilit pour une classe dhriter de plusieurs parents (qui ne sont pas eux-mmes dj parents les uns des autres). Mais toute classe possde une classe parente : les classes forment une arborescence. La racine de larbre, anctre de toutes les classes, est la seule exception. Cette classe racine sappelle Object. Dire quune classe hrite dune autre, cest les relier par une relation de type est-un ou is-a . Introduire un objet par composition comme champ dun autre objet, cest relier ces objets par une relation dappartenance a-un ou has-a . Le plus souvent, on ne choisira lhritage que si cette relation simpose de manire vidente. Ds quil y a doute, on utilisera la composition.

1.1.3 Contrle daccs aux membres des objets


Tableau 1 Les contrles daccs Classe simple class Oui Oui Classe publique public class Oui Oui Oui Membre priv private Oui Membre protg protected Oui Oui Oui, si classe publique Membre public public Oui Oui Oui, si classe publique Oui, si classe publique

Accs

Membre simple Oui Oui

Dans classe courante Dans package courant Par hritage, autre package Partout

Oui

Les packages Les dfinitions des classes sont enregistres dans des fichiers formant une ou des librairies.

8/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Introduction Java

On appelle package un ensemble de dfinitions de classes regroupes parce quelles traitent dun mme problme.

1.2 Java et linternet


1.2.1 Lorigine de Java
Lide lorigine de la cration de Java, mise par Sun Microsystems , tait de disposer dun langage multi-plate-formes. Les applications devaient pouvoir fonctionner dans nimporte quel environnement, sans avoir tre recompiles. Il sagissait en fait de dfinir une machine virtuelle Java (JVM) capable de faire tourner les programmes Java, puis de raliser cette machine virtuelle dans tous les environnements. Cette machine virtuelle est capable dinterprter un langage intermdiaire entre Java et un langage machine appel bytecode. Java peut tre utilis pour lcriture de programmes ordinaires, excutables sur lordinateur o ils sont installs. Pour lexcution, il suffit de disposer de la machine virtuelle correspondant la version de Java utilise dans les programmes. Mais lune des raisons du succs de ce langage est son lien avec linternet : il peut tre utilis pour rsoudre des problmes de programmation sur le Web. Dans ce cas, la machine virtuelle est gnralement intgre dans le navigateur (Internet Explorer, Chrome, Mozilla Firefox, etc.).

1.2.2 Programmation ct client : les applets


Pour pouvoir excuter des programmes sur une machine cliente, on peut utiliser des plug-ins, programmes tlchargeables installer sur le navigateur ; des langages de script, le plus rpandu tant JavaScript, qui permettent dintgrer des programmes simples dans les pages HTML ; et des applets Java, programmes vritables, scuriss, lis des pages HTML, et automatiquement chargs chez le client avec elles. Contrairement aux scripts, les applets sont compiles. Elles ne peuvent pas accder au disque local ce qui garantit la scurit, sauf si lauteur a introduit une signature dans lapplet, permettant thoriquement de le retrouver.

1.2.3 Java ct serveur


La programmation ct serveur sest longtemps limite des programmes CGI (Common Gateway Interface), trs souvent en Perl, dont le rle est de traiter les rponses des formulaires HTML. De nouveaux langages, comme PHP, sont apparus pour permettre des traitements plus complexes, comme laccs des bases de donnes pour construire des pages HTML dynamiques. En ce qui concerne Java, il est possible de dfinir des serveurs qui autorisent la programmation Java

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

9/59

Introduction Java

ct serveur. Les programmes Java excutables par le serveur sont appels des servlets. Il faut y ajouter les JSP (Java Serveur Pages)1, pages HTML contenant du code Java excutable sur le serveur.

1.3 Installation de Java


1.3.1 Installation partir du site de Sun Microsystems
Le langage Java a t dvelopp par Sun Microsystems. Les outils ncessaires (compilateur, documentation, etc) sont disponibles sur le site de Sun http://www.java.sun.com, redirig vers celui de Oracle depuis son acquisition http://www.oracle.com/technetwork/java/index.html. Choisir dans le menu suprieur Top Downloads , puis Java SE (Standard Edition) , et enfin la version la plus rcente du JavaSDK (Java system development kit, ou JDK ). On doit ensuite prciser le systme dexploitation sur lequel faire linstallation. Le site propose une version Solaris (Sun), une version Linux, et une version Windows. Le fichier SDK (pour Windows) porte un nom du type jdk-6u2-windows-i586-p.exe (ce nom change avec les versions). Il est assez volumineux (65 Mo). Un double clic sur le fichier SDK dclenche linstallation. Dans notre cas, linstallation est ralise par dfaut dans le rpertoire java/jdk1.6.0_02. Plusieurs sous-rpertoires sont crs, en particulier bin qui contient les excutables (javac, le compilateur de Java en bytecode ; java, le programme permettant lexcution des programmes Java compils ; appletviewer qui permet dexcuter des applets ; javadoc qui permet de gnrer automatiquement une documentation de ses programmes ; jar qui permet de crer les fichiers darchive jar ; et jarsigner qui permet de signer les applets), jre/lib qui contient lensemble des classes prdfinies, compiles, sous forme dun fichier archive rt.jar, et demo qui contient des exemples de programmes. Dans le rpertoire jdk1.6.0_02 est aussi cr un fichier src.jar contenant les sources des dfinitions des classes publiques de Java. Son contenu peut tre visualis et dcompress par jar.exe ou winzip.

1. Ne pas confondre avec les ASP (Active Server Pages) dont lobjectif est analogue. Les ASP ne fonctionnent que sur Windows, mais permettrent dintgrer divers langages de scripts dans les pages HTML, en particulier JavaScript.

10/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Introduction Java

Figure 1 Contenu de src.jar

1.3.2 Chemins daccs et commandes


Le systme recherche les fichiers excutables (compilateur, interprteur de bytecode, etc) tout dabord sur le rpertoire courant, puis dans les rpertoires dfinis par la variable denvironnement path. La variable path devra tre mise jour manuellement pour contenir le chemin C:\java\jdk1.6.0_02\bin. Dans les anciennes versions de windows, cette variable est dfinie dans le fichier autoexec.bat, situ sur la racine du disque. Sa dfinition est de la forme
SET PATH="C:\Program Files\Inso\balise";%PATH%;C:\java\jdk1.6.0_02\bin

Dans dautres versions de windows, la mise jour des variables denvironnement est ralise partir du panneau de configuration, proprits avances du systme. En ce qui concerne les classes, Java sait retrouver les classes prdfinies. Pour les classes dfinies par lutilisateur, il utilise la variable classpath contenant des chemins daccs des classes. Cette variable est elle aussi dfinie dans autoexec.bat. A moins que cette variable ne soit pas dfinie, il ny a pas de recherche faite systmatiquement dans le rpertoire courant. On doit donc ajouter un point, qui reprsente le rpertoire courant, en tte de la dfinition de la variable, selon le modle :
SET CLASSPATH=.;C:\VisualCafe\BIN\COMPONENTS\SYMBEANS.JAR

La compilation et lexcution se font partir dune fentre MS-DOS. On peut installer sur le bureau un raccourci vers le fichier cmd.exe contenu dans le rpertoire windows\system32. En changeant les proprits de ce raccourci, on peut prciser un rpertoire de travail sur lequel la fentre MS-DOS doit souvrir. La compilation dun fichier source (.java) en byte code est demande par javac programme .java o programme est le nom donn au programme compiler. Le rsultat est un ou plusieurs fichiers dextension .class. Lexcution dun fichier .class est obtenue par java programme . Lextension .class ne doit pas tre indique dans cette commande.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

11/59

Introduction Java

1.3.3 Documentation sur les classes prdfinies


La documentation sur les classes proposes par Java est contenue dans les API specifications de la documentation gnrale.

Figure 2 Spcifications des API : page initiale La figure 2 montre la premire page des spcifications des API. Cette page comporte trois parties. En haut gauche, on choisit de sintresser toutes les classes, ou seulement un package particulier. En bas gauche se trouve la liste active de toutes les classes disponibles, ou de celles du package slectionn. La partie droite donne les informations dtailles. En haut se trouve un menu, avec en particulier : Use qui retrouve les packages, classes, champs, mthodes qui utilisent une classe donne. Tree qui indique la hirarchie des classes, globale ou pour le package courant. Index qui permet de trouver des informations sur tout nom de champ, mthode, classe ou package.

12/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Introduction Java

Figure 3 La classe System ; gnralits La figure 3 montre le dbut des informations concernant la classe System. Au dessus du nom de la classe est donn le nom de son package de rattachement, ici java.lang. Le nom complet de la classe System est en ralit java.lang.System. Cette figure indique que java.lang.System dpend par hritage de java.lang.Object. La deuxime partie de la figure donne les principales caractristiques et utilisations de la classe.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

13/59

Introduction Java

Figure 4 La classe System ; dtails La figure 4 montre la suite des informations accessibles : liste des champs de donnes et des mthodes, leur description dtaille se trouvant encore plus bas dans la page.

14/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les objets en Java

Chapitre 2 Les objets en Java


2.1 Un objet se manipule par un pointeur
En Java, on ne manipule jamais directement un objet, mais une rfrence, un pointeur, un handle vers lobjet. Un programme ne contenant que des pointeurs possde donc une taille qui peut tre dtermine a priori. Les vritables objets sont crs et dtruits dynamiquement dans une zone particulire de la mmoire. Rgles sur les noms (de handles, de mthodes, de classes, etc) : Un nom est une lettre ventuellement suivie de lettres et/ou chiffres et/ou underscores (_). Les lettres majuscules et minuscules sont diffrencies. Seuls les mots rservs de Java sont interdits (null, true, false, break, do, if, etc). Il faut viter les caractres accents. Par convention, un nom de classe commence par une majuscule, et un nom de variable (handle) ou de mthode commence par une minuscule. Si le nom est compos de plusieurs mots accols, la premire lettre de chaque mot est en majuscule, sauf pour le premier qui respecte la rgle prcdente. Cration dun handle (sans objet associ) :
String chaine;

Il faut donner un nom au handle (ici chaine), et prciser vers quel type dobjet il est cens pointer. Le type est un nom de classe dj dfini, ici String, ce qui correspond aux chanes de caractres. Comme pour toute instruction de Java, on termine par un point-virgule.

2.2 Cration dun objet


2.2.1 Mthode gnrale
La mthode gnrale de cration dun objet est la procdure new, selon lexemple :
String chaine = new String("coucou"); Aprs le mot new, on prcise le nom

de la classe pour laquelle on veut crer une instance, puis, entre parenthses, le ou les arguments ncessaires la cration, ici une chane de caractres recon15/59

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

Les objets en Java

naissable par les guillemets qui lentourent. La procdure new fait appel au constructeur de lobjet, pseudo-mthode de mme nom que la classe (ici String ). Elle retourne un pointeur vers lobjet cr quon mmorise dans un handle.

2.2.2 Les types lmentaires


Les types lmentaires de donnes ne sont pas des objets en Java ; les variables de ce type contiennent directement les valeurs correspondantes, plutt que des pointeurs vers ces valeurs. Cependant, pour chaque type lmentaire, il existe un type associ, correspondant un vritable objet qui contient la valeur lmentaire. Tableau 2 Principaux types lmentaires type boolean char int long float double 1 bit 16 bits 32 bits 64 bits 32 bits 64 bits taille valeurs
true ou false

valeur par dfaut


false

type objet Boolean Character Integer Long Float Double

1 caractre uni- le caractre nul code nombre entier nombre entier nombre rel nombre rel 0 0L 0.0f 0.0d ou 0.0

Lorsquun caractre doit tre directement crit dans un programme, il faut lentourer dapostrophes (x pour reprsenter le caractre x). Une chane de caractres est un vritable objet qui peut contenir plusieurs caractres et quon crit entre guillemets : "coucou". Il existe des codes permettant dutiliser des caractres spciaux, soit seuls, soit dans une chane de caractres. Tableau 3 Codage de certains caractres code \b \f \n \r signification retour arrire dun caractre (backspace) saut de page (form feed) passage la ligne (next line) retour dbut de ligne (carriage return)

16/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les objets en Java

code \t \\ \ \" \ooo \uxxxx

signification tabulation horizontale le caractre \ (backslash ou antislash) lapostrophe le guillemet caractreASCII de code octal ooo (un 0 en tte est optionnel) caractre Unicode de code hexadcimal xxxx

La dclaration dune variable de type lmentaire est, par exemple :


char carac = x;

Cette instruction cre la variable carac, pouvant contenir un caractre, et lui donne la valeur x.

2.3 Destruction dun objet


En Java, le programmeur na pas se proccuper de supprimer les objets. Un programme annexe, le garbage collecteur (ramasseur dordures), se dclenche automatiquement lorsque la zone mmoire rserve aux objets dpasse un certain taux de remplissage. Les objets inutiles sont dtruits et la place rcupre. Lorsquil se dclenche, le garbage collector sexcute en parallle avec le programme. Un objet est inutile si notre programme ne peut plus sen servir, cest dire sil nexiste plus de handle vers lui. Cela arrive si on fait pointer le (ou les) handle dun objet vers un autre objet ou vers la valeur null. Cela arrive aussi si les handles vers lobjet ont t dfinis lintrieur dun bloc, ensemble dinstructions comprises entre une accolade ouvrante { et une fermante }, par exemple dans une mthode : locaux au bloc, ils sont oublis la sortie. Le garbage collecteur procde en plusieurs tapes. 1. 2. De manire asynchrone, il repre et marque les objets devenus inutiles. Il ny a pas de moyen de synchroniser cette opration avec le programme. Lorsque la place occupe par les objets est trop importante, ou suite une demande du programme (appel la mthode System.gc()), le garbage collector prend chaque objet marqu inutile, leur applique leur mthode finalize, si elle existe, et les marque comme finaliss . La mthode finalize permet thoriquement de raliser dultimes oprations sur un objet avant destruction, mais on nest jamais sr quelle sera excute. Dans le mme temps, le garbage collector reprend les objets finaliss dans une tape antrieure et les dtruit.

3.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

17/59

Les objets en Java

2.4 Cration dune classe


2.4.1 Structure gnrale
class NvCl { /* membres : ** champs de donnes ** et mthodes */ }

Ces lignes dfinissent une classe nomme NvCl. La dfinition dbute par le mot rserv class, puis est suivie du nom choisi pour la classe. Le mot class doit tre prcd de public pour que la classe soit accessible partout ; dans le cas contraire, elle nest accessible que dans le package courant. La dfinition proprement dite de la classe est mise entre accolades, dans un bloc. Toute mthode dfinie dans le bloc est accessible partout dans ce bloc. Tout champ de donnes est accessible aprs sa cration. Dans lexemple la classe ne contient quun commentaire dont le dbut est marqu par /* et la fin par */. Aprs cette dfinition, on peut crer des instances selon la mthode habituelle :
NvCl nobj = new NvCl();

2.4.2 Les membres champs de donnes


class NvCl { boolean b; int i = 47; float f = 1.3f; String s = new String("coucou"); int j = 2*i-3; /* mthodes */ } Le champ b peut contenir un boolen, mais nest pas initialis. Il prend une valeur par dfaut (false). Les champs i, f et s sont initialiss par des valeurs ou des objets. Le champ j est initialis laide

dune formule faisant intervenir un champ dj dfini. Dans toute la classe, les champs sont directement accessibles par leurs noms. Si on a cr un objet nobj par NvCl nobj = new NvCl();, on peut accder depuis lextrieur au contenu de chaque champ dans cet objet en faisant suivre son nom nobj dun point et du nom du champ. On peut crire :
nobj.i = 50; nobj.f = (float)(nobj.j-10); nobj.s = new String("Hello");

Rappelons que ce type daccs peut tre interdit par la dclaration des champs (voir section 1.1.3

18/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les objets en Java

page 8). Champ static Laccs externe un champ de donnes passe normalement par un objet instance de la classe. Il est cependant possible de dclarer un champ comme static, en faisant prcder sa dclaration du mot static, ce qui interdit la recopie du champ dans les instances. Laccs un tel champ est obtenu en faisant prcder son nom de celui de la classe et dun point. Ce nest cependant pas une erreur dutiliser un nom dinstance la place du nom de la classe. Champ final Un champ est final si on ne peut lui donner de valeur quune seule fois. On utilise gnralement cette possibilit pour dfinir des constantes. Exemple :
final static float valeurPi = 3.14f;

2.4.3 Les membres mthodes


2.4.3.1 Dclaration
class NvCl { int i; float f; boolean b; String s; int ajouter (int a, int b) { return a+b; } int nbOctetsChaine (String s) { return s.length()*2; } }

Cet exemple de classe contient deux mthodes nommes ajouter et nbOctetsChaine. Le nom de chaque mthode est prcd du type du rsultat : ici toutes deux retournent un nombre entier int. Ce type est un nom de classe si le rsultat est un objet, ou le mot void si la mthode ne retourne pas de rsultat. Le nom de chaque mthode est suivi, entre parenthses, de la liste des arguments. Plusieurs arguments sont spars par des virgules. Si une mthode ne possde pas dargument, les parenthses restent obligatoires. Un argument dfinit une variable locale la mthode : on lui donne un nom, et son type. Largument b de la premire mthode, et largument s de la seconde, nont aucun rapport avec les champs b et s de la classe. Si on veut pourtant rfrencer le champ masqu, on utilisera lcriture this.b ou this.s, le mot this reprsentant lobjet courant. Lorsquon utilise la mthode, il faut prciser les valeurs des arguments. Pour un argument de type lmentaire, la valeur donne est recopie dans la variable locale : la modification de 19/59

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

Les objets en Java

cette valeur dans la mthode ne modifie pas la valeur externe. Si un argument correspond un objet, la valeur recopie dans la variable locale est un handle vers lobjet : lobjet lui-mme nest pas recopi, et une modification dans la mthode se voit lextrieur. Vient ensuite le corps de la mthode crit entre accolades, ensemble des instructions qui dfinissent le travail que la mthode doit raliser. Parmi ces instructions, on trouve linstruction return qui arrte lexcution de la mthode et retourne la partie du programme qui la appele. Sauf pour une mthode de type void, linstruction return dfinit aussi la valeur que la mthode doit retourner. Dans la premire mthode, la valeur retourne est la somme des deux arguments. Dans la seconde, il sagit du nombre doctets occups par la chane de caractres passe en argument, double du nombre de caractres de cette chane.

La dclaration dune mthode doit en outre prciser les droits dutilisation. On devra par exemple faire prcder sa dclaration du mot public pour quelle soit utilisable partout (se reporter la section 1.1.3 page 8).

2.4.3.2 Utilisation : envoi de messages


Dans tout le bloc de dfinition de la classe, on utilise une mthode de cette classe en donnant son nom, suivi entre parenthses des valeurs des arguments spares par des virgules. Sil ny a pas darguments, les parenthses restent obligatoires. Si on a cr un objet nobj par NvCl nobj = new NvCl();, on peut utiliser chaque mthode dfinie pour cet objet en faisant suivre son nom nobj dun point, du nom de la mthode, et, entre parenthses, des valeurs des arguments. On dit quutiliser une mthode dun objet, cest lui envoyer un message. Nous supposons ici que lutilisation de la mthode est effectivement autorise.
nobj.i = 47; nobj.f = (float)nobj.ajouter(nobj.i, 12); String s1 = new String("Hello"); System.out.println("Nombre doctets de " + s1 + " : " + nobj.nbOctetsChaine (s1));

Noter la transformation du rsultat entier de la mthode ajouter en flottant par le casting (float). En ralit, Java effectue automatiquement (casting implicite) tout casting qui augmente la prcision du codage (par exemple float en double), ou lors dune conversion dentier vers flottant, ou encore pour transformer un objet en un objet parent. Dans les autres cas le casting doit tre explicite.

2.4.3.3 La surcharge de mthodes


Il est possible de dfinir dans une classe plusieurs fois la mme mthode, pourvu que ces dfinitions ne possdent pas la mme signature. La signature dune mthode est la liste ordonne des types des arguments. Deux signatures sont diffrentes si elles ne possdent pas la mme taille (les mthodes nont pas le mme nombre darguments), ou si au moins un type est diffrent la mme position (par exemple le premier argument est int dans un cas et double dans lautre). Il est possible dans une mthode dappeler une mthode de mme nom. Si les deux signatures sont identiques, la mthode sappelle elle mme : on parle de mthode rcursive. Si la signature est diffrente, il sagit dun appel ordinaire. 20/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les objets en Java

2.4.3.4 Les constructeurs


Les constructeurs sont des mthodes particulires. Un constructeur porte le mme nom que la classe dans laquelle il est dfini. Il est automatiquement appel lors de la cration dun objet par new. Il ne peut pas retourner de rsultat. Toute classe possde un constructeur par dfaut, mthode portant le nom de la classe, mais ne possdant pas dargument. Ce constructeur par dfaut najoute aucune action la cration de lobjet, mais est ncessaire au bon fonctionnement de new. Comme pour les mthodes ordinaires, on peut surcharger les constructeurs. Cependant, ds quun constructeur est dfini explicitement, quil possde ou non des arguments, Java ne cre plus de constructeur par dfaut.
class NvCl { int i; float f; boolean b; String s; NvCl (int a) { i = a; } NvCl (int a, String s) { i = a; this.s = s; } int ajouter (int a, int b) { return a+b; } int nbOctetsChaine (String s) { return s.length()*2; } }

Il est possible dappeler un constructeur depuis un autre, par exemple pour viter de rcrire plusieurs fois les mmes instructions. Mais il faut une syntaxe particulire utilisant du mot this suivi de parenthses pour les ventuels arguments. Les parenthses vitent la confusion avec le mot this utilis pour rfrencer lobjet courant. Pour que le constructeur 2 arguments appelle celui un seul argument, on crira
NvCl (int a, String s) { this (a); this.s = s; }

Une contrainte importante doit tre respecte. Lappel un autre constructeur via le mot this doit tre ralis dans la premire instruction du constructeur. Cette contrainte est lie aux problmes dhritage : si la premire instruction dun constructeur nest ni lappel un autre constructeur de la classe par this, ni lappel un constructeur de la classe parente ( laide du mot super), Java appelle automatiquement le constructeur de la classe parente sans argument.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

21/59

Les objets en Java

2.4.3.5 Les mthodes static


En dehors de la dfinition de la classe, les mthodes ne sont normalement accessibles qu travers ses instances. On peut cependant dclarer des mthodes static attaches uniquement la classe en ajoutant le mot static en tte de la dclaration de la mthode. Laccs une mthode statique sobtient en crivant le nom de la classe, un point et le nom de la mthode. Mais laccs reste possible en remplaant le nom de la classe par un handle dobjet. Cependant aucune rfrence lobjet courant ne peut tre faite dans la mthode : en particulier, lutilisation du mot this y est interdite.

2.5 Un programme lmentaire


// Un programme lmentaire public class Test { public static void main(String[] argv) { Nvcls nobj = new Nvcls (10); String s1 = new String("bonjour"); System.out.println("Nombre doctets de " + s1 + " : " + nobj.nbOct (s1)); nobj.aff(); nobj.f = nobj.ajouter(1.5f, 12); nobj.aff(); } } class Nvcls { int i=47; float f; Nvcls () {} Nvcls (int a) {i=a;} int ajouter (int a, int b) {return a+b;} float ajouter (float a, float b) {return a+b;} int nbOct (String s) {return s.length()*2;} void aff () {System.out.println("i= " + i + " f = " + f);} }

Ce programme dbute par un commentaire : un double slash (//) met en commentaire tout ce qui le suit, jusqu la fin de la ligne. On peut aussi faire un commentaire sur plusieurs lignes laide du double caractre /* pour dbuter le commentaire et de */ pour en marquer la fin. Le programme contient deux dclarations de classes. La seconde, Nvcls, est celle que nous avons dj introduite, quelques variations prs. La premire classe a pour nom Test et est dclare public. Le programme doit tre enregistr dans

22/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les objets en Java

un fichier nomm Test.java. Le nom de la classe public est le mme que le nom du fichier ( lextension .java prs). Cette contrainte impose aussi quil y ait au plus une seule classe public dans un fichier. Cette classe Test possde uniquement une mthode main. Ce nom est prdfini dans Java. Lors de la compilation du fichier Test.java, on obtient deux fichiers Test.class et Nvcls.class. La commande java Test qui lance le programme demande en ralit dexcuter la mthode main de la classe Test. La mthode main est dclare public (accessible de partout) et static (elle ne doit pas tre recopie sur les ventuelles instances de la classe Test). Son argument String[] argv est un tableau de chaines de caractres nomm argv. Ce nom peut tre chang, mais il est conventionnel. Dans ce tableau sont ranges les ventuelles informations complmentaires tapes la suite de la ligne de commande java Test.

2.6 Transformation en applet


// Un applet lmentaire //<applet code="TestApplet" width=200 height=250></applet> public class TestApplet extends java.applet.Applet { public void init() { Nvcls nobj = new Nvcls (10); String s1 = new String("bonjour"); add(new java.awt.Label("Nombre doctets de " + s1 + " : " + nobj.nbOct (s1))); nobj.aff(this); nobj.f = nobj.ajouter(1.5f, 12); nobj.aff(this); } } class Nvcls { int i=47; float f; Nvcls () {} Nvcls (int a) {i=a;} int ajouter (int a, int b) {return a+b;} float ajouter (float a, float b) {return a+b;} int nbOct (String s) {return s.length()*2;} void aff (TestApplet appl) {appl.add(new java.awt.Label("i= " + i + " f = " + f));} } La premire classe a t renomme TestApplet ; son en-tte a t complt de extends java.applet.Applet pour quelle hrite de la classe Applet dfinie dans le package java.applet ; et la mthode main a

t remplace par init, sans argument, mthode automatiquement dclenche lors du lancement de lapplet.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

23/59

Les objets en Java

Un objet applet est un objet graphique particulier, un conteneur . La mthode add permet dajouter pour affichage des objets particuliers (ici un Label) aux conteneurs. La mthode aff de la classe Nvcls possde maintenant en argument le conteneur sur lequel crire des informations. Le lancement dun applet depuis une page HTML est dfini par la balise <applet> dont les trois principaux attributs sont code qui permet dindiquer le nom de lapplet, height et width qui dfinissent en pixels la hauteur et la largeur de la zone graphique (le conteneur) de lapplet. Ces dimensions peuvent tre dun pixel si lapplet na pas daffichage faire, mais le conteneur ne peut tre supprim. On crira par exemple :
<applet code="TestApplet.class" width=200 height=250></applet>

Il est possible de passer des arguments lapplet laide de la balise <param>. Lors de la mise au point dun applet, il est difficile de faire les tests sur un navigateur. En effet, pour quil prenne en compte des modifications, il est ncessaire de larrter et de le relancer. Il est prfrable dutiliser loutil appletviewer, avec une commande du type
appletviewer essai.html

Plutt que dcrire une vritable page HTML, on peut aussi mettre en tte du fichier java un commentaire contenant la balise <applet> et les ventuels <param>, comme dans lexemple prcdent. Loutil appletviewer sait lire ces commentaires pour crer le conteneur, condition dutiliser une commande du type
appletviewer TestApplet.java

Le paramtre de la commande est le fichier source dextension .java.

24/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Oprateurs et structures de contrle

Chapitre 3 Oprateurs et structures de contrle


3.1 Laffectation
Une instruction daffectation est de la forme
x = y;

Son rle est de mmoriser dans la variable x, situe gauche du signe =, la valeur dtermine par lexpression y situe droite du signe =. La variable en partie gauche est, soit dclare avant, soit directement dans linstruction en la faisant prcder de son type. La partie droite peut tre une valeur littrale (nombre ou caractre), un nom de variable , ou une expression faisant intervenir des valeurs littrales, des variables, des oprateurs, des parenthses, et des mthodes. La valeur obtenue par lvaluation de la partie droite doit tre du type de la variable en partie gauche. Dans le cas contraire, il faut raliser un transtypage, ou casting. Cette opration est ralise automatiquement lorsquelle ne peut conduire une perte dinformation (sur-casting) ; elle doit tre explicite dans le cas contraire (sous-casting). Le casting sobtient en faisant prcder lexpression du type obtenir ; le type doit tre mis entre parenthses ; sil y a doute, lexpression doit aussi tre entre parenthses pour que le casting porte sur son intgralit.

3.2 Oprateurs et fonctions mathmatiques


Les oprateurs arithmtiques sont + pour laddition, - pour la soustraction, * pour la multiplication, / pour la division, et % pour le modulo (reste dune division entire). Le type du rsultat est le type le plus large des oprandes. Dans une expression qui combine plusieurs oprateurs, lordre du calcul se fait de gauche droite, mais en respectant les priorits entre oprateurs : dabord les multiplications, divisions et modulo, ensuite les additions et soustractions. Lorsquil y a des mthodes, les arguments sont valus, puis les mthodes appeles. Pour changer les priorits, on peut mettre des parenthses.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

25/59

Oprateurs et structures de contrle

forme abrge
x += y; x -= y; x *= y; x /= y; x %= y; x++; ++x; x--; --x;

signification
x = x + y; x = x - y; x = x * y; x = x / y; x = x % y; x = x +1; x = x +1; x = x - 1; x = x - 1;

post-incrment pr-incrment post-dcrment pr-dcrment

La diffrence entre x++ et ++x (ou entre x-- et --x) na dintrt que si on utilise ces formes abrges dans une expression plus gnrale. Lorsque le double signe ++ (ou --) se trouve avant la variable, lincrment (ou le dcrment) doit tre fait en priorit, et cest la nouvelle valeur qui est utilise dans le reste du calcul. Si le double signe se trouve aprs la variable, la valeur initiale de la variable est utilise dans le calcul, puis, la variable est incrmente (ou dcrmente). Les fonctions mathmatiques les plus utiles sont des mthodes de la classe Math, dfinie dans le package java.lang. Ce package tant charg avec tout programme, cette classe et les mthodes correspondantes sont accessibles sans opration particulire :

nom
Math.abs(x) Math.sin(x) Math.cos(x) Math.tan(x) Math.log(x)

signification valeur absolue de largument sinus de largument en radians cosinus de largument en radians tangeante de largument en radians logarithme nprien de largument (positif)

commentaire conserve le type de largument rsultat de type double rsultat de type double rsultat de type double rsultat de type double

26/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Oprateurs et structures de contrle

nom
Math.exp(x) Math.pow(x, y) Math.sqrt(x) Math.round(x) Math.min(x, y) Math.max(x, y) Math.random()

signification exponentielle de largument


x

commentaire rsultat de type double rsultat de type double rsultat de type double rsultat long si x est double, et int si x est float rsultat entier si les arguments le sont rsultat entier si les arguments le sont rsultat double

lev la puissance y

racine carre de largument (positif ou nul) entier arrondi valeur minimum des deux arguments valeur maximum des deux arguments nombre pseudo-alatoire entre 0 et 1

3.3 Oprateurs de comparaison et expressions logiques


Une expression logique est une expression dont le rsultat dvaluation est une valeur boolenne, cest dire lune des deux valeurs true (vrai) et false (faux). Les oprateurs de comparaison permettent de construire des expressions logiques partir de constituants non boolens :

criture
x == y x != y x>y x >= y x<y x <= y x instanceof y

signification les contenus de x et y sont-ils identiques ? les contenus de x et y sont-ils diffrents ? le contenu de x est-il plus grand que celui de y ? le contenu de x est-il suprieur ou gal celui de y ? le contenu de x est-il plus petit que celui de y ? le contenu de x est-il infrieur ou gal celui de y ? lobjet x est-il une instance de la classe y ?

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

27/59

Oprateurs et structures de contrle

Remarquons que x == y est true si x et y ont la mme valeur. Lorsque x et y sont des handles , ils sont gaux sils dsignent le mme objet, mais pas sils dsignent deux objets distincts, mme lorsque ces objets ont le mme contenu. Tout objet dispose dune mthode equals permettant de comprer les contenus. On crit s1.equals(s2) pour comparer s2 avec s1. Pour la plupart des classes prdfinies dans Java, la mthode equals compare effectivement les contenus des objets. Pour les classes dfinies dans un programme, il faut redfinir cette mthode pour ladapter ; par dfaut, elle ne compare que les handles. Des expressions logiques peuvent tre combines laide doprateurs logiques :

expression
x && y x || y !x

signification et logique : true ssi x true et y true ; false ds que x ou y false ou logique : true ds que x ou y true ; false ssi x false et y false non logique : true si x false ; false sinon

Les oprateurs logiques sont valus de gauche droite, mais en respectant certaines priorits. Le non est prioritaire sur le et , qui lest sur le ou . Il est possible dutiliser des parenthses pour forcer un ordre dvaluation particulier. Ds quun composant dun et logique svalue false, Java retourne la valeur false pour le et logique , sans valuer le ou les composants restants. De mme, ds quun composant dun ou logique svalue true, Java retourne la valeur true pour le ou logique , sans valuer le ou les composants restants.

3.4 Loprateur + pour les chanes de caractres


Loprateur + permet, lorsquil est appliqu des chanes de caractres, de les concatner.
String s1 = "Bon"; String s2 = "jour"; String s = s1 + s2; La chane s contient "Bonjour".

28/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Oprateurs et structures de contrle

3.5 Instructions conditionnelles


3.5.1 Linstruction if
Linstruction compose if permet de tester une condition et dexcuter une sous- instruction uniquement si la condition est vrifie. Dans une forme plus complte, on prcise deux sousinstructions : la premire excuter uniquement si la condition est vrifie, la seconde excuter uniquement si la condition nest pas vrifie. Forme simple :
if (condition ) instruction ;

Forme complte :
if (condition ) instruction ; else instruction ;

Si on doit crire plusieurs sous- instructions excuter au lieu dune seule autorise, il faut les mettre dans un bloc dfini par une accolade ouvrante { et une accolade fermante }.

3.5.2 Linstruction switch


Linstruction switch permet de dfinir des actions faire selon les valeurs prises par une expression retournant soit un nombre entier, soit un caractre.
switch (expression ) { case valeur1 : instruction ; instruction ; ....; break; case valeur2 : instruction ; instruction ; ....; break; ....; default: instruction ; instruction ; ....; }

Lexpression entre parenthses qui suit le mot switch est value par Java. Son rsultat doit tre une

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

29/59

Oprateurs et structures de contrle

valeur entire, ou un caractre. Si ce rsultat est retrouv parmi les valeurs suivant les mots case, les instructions correspondantes sont excutes. Le break; qui suit force quitter linstruction switch ; en son absence, les instructions du case suivant sont elles aussi excutes. Si le rsultat nest pas retrouv parmi celles prvues, ce sont les instructions suivant default: qui sont excutes. La partie default: est optionnelle. A titre dexemple, voici une partie de programme consistant ajouter, soustraire, multiplier ou diviser le contenu dune variable resultat par un nombre contenu dans une variable nbcour, puis ranger la valeur obtenue dans resultat. Lopration faire est dfinie par un caractre contenu dans la variable opr.
switch (opr) { case +: resultat += nbcour; break; case -: resultat -= nbcour; break; case *: resultat *= nbcour; break; case /: if (nbcour == 0) { System.out.println("Erreur : division par zro. Opration ignore"); } else { resultat /= nbcour; } break; default: System.out.println("Erreur : oprateur " + opr + " inconnu"); }

3.6 Instructions ditration


3.6.1 Instruction while
Linstruction while permet de rpter des instructions tant quune certaine condition est vrifie. Elle scrit :
while (condition ) instruction ;

30/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Oprateurs et structures de contrle

Le corps de la boucle est linstruction rpter. Si le corps doit contenir plusieurs oprations, il faut regrouper la srie dinstructions correspondantes en un bloc laide des accolades. Le test de fin de boucle est fait avant lexcution du corps. Si la condition est fausse lors de sa premire valuation, le corps ne sera donc jamais excut. La boucle peut tre interrompue prmaturment laide de linstruction break. Linstruction continue permet dinterrompre litration en cours et de passer litration suivante.

Exemple :
import java.io.*; class ExempWhile { public static void main(String[] argv) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int a, b = 0; while (a <= 0) { System.out.print("Entrez le premier entier positif : "); a = (new Integer(br.readLine())).intValue(); } while (true) { System.out.print("Entrez le second entier positif : "); b = (new Integer(br.readLine())).intValue(); if (b > 0) break; } System.out.println("Valeurs : a = " + a + " b = " + b); } }

Ces deux boucles permettent dentrer au clavier la valeur de deux entiers et de contrler que ces valeurs sont strictement positives, mais avec des tests de fin de boucle diffrents. Les instructions permettant la lecture de nombres au clavier sont dtailles dans le chapitre 7 page 45. Si plusieurs boucles sont imbriques, les instructions continue et break ne concernent que la boucle la plus interne dans laquelle elles sont crites. Cependant on peut donner une tiquette (nom suivi dun deux-points) une boucle. On crira par exemple boucle1: while (a <= 0) {..... Dans les boucles internes la boucle ainsi marque, on peut maintenant utiliser les instructions continue boucle1; et break boucle1;. La premire demande passer immdiatement litration suivante de la boucle marque boucle1. La seconde demande quitter immdiatement la boucle marque.

3.6.2 Instruction do-while


Linstruction do-while permet de rpter des instructions tant quune certaine condition est vrifie. Elle scrit :
do

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

31/59

Oprateurs et structures de contrle instruction ; while (condition );

La diffrence avec while est que le test de fin de boucle est fait aprs lexcution du corps de la boucle, donc que les instructions sont donc toujours excutes au moins une fois. Exemple :
import java.io.*; class ExempDoWhile { public static void main(String[] argv) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int a; do { System.out.print("Entrez un nombre entre 0 et 9 : "); a = (new Integer(br.readLine())).intValue(); } while ((a < 0) || (a > 9)); System.out.println("Valeur : a = " + a); } }

Cette boucle demande lentre au clavier dun nombre entier compris entre 0 et 9. Elle sarrte ds que le nombre fourni vrifie cette condition.

3.6.3 Instruction for


Linstruction for, est utilise lorsque le nombre de rptitions faire est connu ou calculable lavance. Cette instruction permet de grer facilement des compteurs de rptition qui servent pour le test de fin de boucle et trs souvent dindice pour accder aux lments de tableaux. Linstruction for scrit :
for (instruction_initiale ; condition ; instruction_d_itration ) instruction ;

Linstruction_initiale est excute une et une seule fois, lors de lentre dans la boucle. Elle sert gnralement initialiser un compteur. La condition est ensuite teste. Si elle est fausse, on quitte le corps de la boucle pour passer la suite du programme ; le corps de la boucle peut donc ntre jamais excut. Si elle est vraie, linstruction formant le corps de la boucle est excute. Linstruction_d_itration est excute son tour. Puis la condition est teste nouveau et le cycle recommence. Ce schma dexcution est quivalent celui obtenu par :
instruction_initiale ; while (condition ) { instruction ; instruction_d_itration ; }

32/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Relations entre classes : packages, hritage, classes internes

Chapitre 4 Relations entre classes : packages, hritage, classes internes


4.1 Les packages
Un package est un regroupement de classes juges homognes. Par exemple java.io est un package qui regroupe les classes concernes par les oprations dentre/sortie.

4.1.1 Accs un package


Pour utiliser une classe dun package, on peut soit en donner le nom complet, package compris, soit utiliser linstruction import, puis rfrencer la classe directement. Dans linstruction import, on peut prciser le package et la classe du package importer. Ecrire import java.awt.Label; permet ensuite laccs la classe Label par son simple nom. On peut aussi demander importer toutes les classes dun package, selon le modle import java.awt.*;

Linstruction import ne demande pas le chargement des classes dun package, mais sert uniquement simplifier les modalits daccs ces classes. Deux packages sont directement accessibles, sans ncessiter dinstruction import : java.lang qui contient des classes dusage trs frquent : Object, objets correspondants aux types lmentaires comme Integer ou Character, Math, String, ou System. Le package par dfaut o sont ranges les classes non attaches explicitement un package.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

33/59

Relations entre classes : packages, hritage, classes internes

4.1.2 Cration dun package


Un programmeur peut crer ses propres packages, et y rattacher les classes quil a dveloppes, laide de linstruction package. Elle scrit
package nom_du_package ;

Cette instruction doit tre la premire du ou de chaque fichier contenant les classes rattacher au package. Elle concerne toutes les classes de ce ou ces fichiers. Java introduit aussi la notion de sous-package : dans le package java.awt, awt est un sous-package du package plus gnral java. Le nom complet doit comporter lensemble des packages dont il dpend, en commenant par le plus gnral, et en sparant chacun par un point. Les packages sont traduits par des rpertoires sur le disque local. Ainsi au package java.awt est associ un rpertoire java contenant un sous-rpertoire awt. En ralit, pour les classes prdfinies, ces rpertoires se trouvent dans le fichier archive rt.jar du rpertoire jre\lib (voir section 1.3.1 page 10). Pour les packages dfinis par lutilisateur, les sous-rpertoires doivent tre crs dans des rpertoires dtermins par la variable denvironnement classpath (voir section 1.3.2 page 11). Il faut veiller ce que les fichiers compils (.class) soient rangs dans les rpertoires voulus.

4.2 Lhritage
Pour indiquer quune classe hrite dune autre, on complte sa premire ligne de dclaration du mot extends suivi du nom de la classe parente, selon le modle
class Cercle extends Courbe {....

La classe fille a accs aux champs de donnes et aux mthodes de la classe parente comme sils taient dfinis directement, moins dune restriction impose dans la classe parente (membres private par exemple). Cependant, la classe fille peut redfinir tout ou partie des membres de sa parente. Le polymorphisme garantit laccs au membre de lobjet le plus spcifique. Une classe ne peut avoir quun seul parent (pas dhritage multiple), et toute classe en possde un : lorsquon ne dclare pas explicitement de relation dhritage, la classe parente est Object. Seule Object ne possde pas de parent. Si, dans un objet, on veut rfrencer lobjet parent, on peut utiliser le mot super, de mme que le mot this permet de rfrencer lobjet courant. Lorsquon instancie une classe, son constructeur est appel. Mais avant lui sont dclenchs les constructeurs sans argument de toutes les classes parentes, en commenant par la plus leve, Object. Il est possible dagir sur ces appels : on force lappel un constructeur de la classe parente avec arguments si la premire instruction du constructeur de la classe fille est le mot super suivi entre parenthses du ou des arguments transmettre ; on force lappel un autre constructeur de la mme classe si la premire instruction du constructeur de la classe fille est le mot this suivi entre parenthses du ou des arguments transmettre (voir section 2.4.3.4 page 21).

34/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Relations entre classes : packages, hritage, classes internes

4.3 Les interfaces


Java laisse la possibilit de dfinir dans une classe des mthodes abstraites (dclares abstract). Une telle mthode ne comporte quun en-tte, par exemple abstract void dessine (float x0, float y0); Elle nest pas utilisable, puisquelle ne possde pas de code excutable. Lintrt est de fournir un cadre de travail dfinissant le rle quelle devrait avoir, son nom, ses arguments, le type du rsultat, et les circonstances de son appel. Par exemple, actionPerformed est une mthode abstraite dfinie dans ActionListener. Cette mthode est appele lorsque certaines actions (comme le clic sur un bouton) sont ralises. La mthode abstraite devra tre dfinie rellement pour sappliquer des boutons dune fentre particulire. Plus gnralement, pour tre utilisable, une mthode abstraite doit tre rellement dfinie sur les classes filles de celle o elle est dclare. Une classe qui possde au moins une mthode abstraite doit elle aussi tre dclare abstraite (abstract). Une classe abstraite ne peut tre instancie, mais sert de modle pour construire des classes filles. On appelle interface une classe purement abstraite, qui ne peut donc tre instancie. Elle ne contient que des mthodes abstraites (en-ttes sans dfinitions), et des champs de donnes final static (constantes) de types lmentaires. Les interfaces autorisent une forme dhritage multiple : une interface peut hriter de plusieurs interfaces, mais pas de classes ordinaires ; une classe ordinaire peut hriter dune classe ordinaire et de plusieurs interfaces. Une interface est dfinie en remplaant le mot class par le mot interface. Elle peut tre dclare public ou non. Il ne faut pas indiquer quelle est abstract. Pour dire quune interface hrite dune autre, on utilise le mot extends suivi de un ou plusieurs noms dinterfaces spars par des virgules. Pour dire quune classe hrite dune ou plusieurs interfaces, on utilise le mot implements suivi de un ou plusieurs noms dinterfaces spars par des virgules. Si la classe doit aussi hriter dune vritable classe, le extends doit tre crit avant le implements.

4.4 Les classes internes


Une classe interne est une classe dfinie lintrieur dune autre classe. Les classes internes ne sont accessibles qu travers la classe o elles sont dfinies, mais elles ont accs tous les lments de la classe qui les contient.
public class Melange { class Destination { private String nom; Destination (String lieu) { nom = lieu; }

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

35/59

Relations entre classes : packages, hritage, classes internes String retrouverNom () {return nom;} } public Destination dest(String s) {return new Destination(s);} public static void main(String[] argv) { Melange m = new Melange(); Melange.Destination d1 = m.new Destination("Venise"); Melange.Destination d2 = m.dest("Rome"); } }

La dclaration dune classe interne noffre aucune difficult. Le type correspondant scrit avec le nom de la classe externe, un point, et le nom de la classe interne (Melange.Destination dans lexemple). La cration dune instance de la classe interne se fait via un objet instance de la classe englobante, via linstance m de Melange dans lexemple : au lieu dutiliser new, on crit le nom de linstance externe, un point, et new (ici m.new). Une autre possibilit consiste utiliser une mthode (ici dest) en prcisant le nom de linstance externe lors de lappel (m.dest). On peut rfrencer lobjet externe de rattachement depuis lobjet interne en crivant le nom de la classe externe, suivi dun point, et du mot this, soit, dans lexemple, Melange.this (qui rfrence le mme objet que le handle m). Le fichier contenant lexemple prcdent devrait sappeler Melange.java. Lors de sa compilation, sera cr un fichier Melange.class, mais aussi un fichier Melange$Destination.class contenant la dfinition de la classe interne. Une classe interne peut tre dclare static. Ses instances restent alors attaches la classe externe, et il nest plus ncessaire de crer des instances de la classe externe pour instancier la classe interne. Dans lexemple, au lieu dutiliser le handle m vers un objet englobant, on utilisera directement le nom de la classe Melange.

36/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Tableaux et chanes de caractres

Chapitre 5 Tableaux et chanes de caractres


5.1 Les tableaux
Un tableau est un objet contenant dautres objets, tous de mme type. Plus exactement, un tableau contient des handles vers des objets de mme type, ou des valeurs de mme type lmentaire. Une fois fix, le nombre dlments que peut contenir un tableau, sa taille, ne peut plus tre modifi. La dclaration dun handle de tableau est de la forme :
int[] tab; O tab est

le nom donn au tableau, et int le type commun de ses lments.

La cration dun tableau de 5 lments vides (en fait de valeur 0) est de la forme :
tab = new int[5];

Une initialisation du tableau peut tre effectue directement lors de sa cration, selon le modle :
int[] tab = {1, 2, 3, 4, 5};

Les valeurs des lments peuvent tre remplaces par des expressions. Laccs un lment du tableau se fait en donnant le nom du tableau, suivi entre crochets de lindice de llment dans le tableau. En Java, les lments sont indics partir de 0. tab[2] = 10; donne donc la valeur 10 au troisime lment du tableau. Lutilisation dun tableau va gnralement de pair avec celle de boucles for :
int[] tab = new int[5]; int i; for (i = 0; i < tab.length; i++) { tab[i] = 2*i+3; } Le champ length contient la

taille du tableau.

Java sait manipuler des tableaux multidimensionnels.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

37/59

Tableaux et chanes de caractres int[][] tab2 = new int[3][]; dfinit un tableau dentiers deux dimensions

: la premire a 3 lments (3 lignes), et la taille de la seconde (nombre de colonnes) nest pas prcise. Il sagit en fait de 3 tableaux unidimensionnels tab2[0], tab2[1] et tab2[2] dont les tailles peuvent tre choisies diffrentes. Laccs un lment se fait en prcisant deux indices : tab2[1][0] rfrence la premire colonne de la deuxime ligne.

5.2 Les chanes de caractres


Les chanes de caractres sont dfinies par la classe String de java.lang. Une chane, aprs cration, ne peut plus changer de taille. Pour des raisons defficacit, elle ne peut mme plus tre modifie : chaque modification dune chane se traduit par la cration dun nouvel objet. Le constructeur le plus utile possde en argument la chane de caractres crite entre guillemets. Il est possible dinitialiser directement une variable par une chane de caractres sans utiliser lcriture new, mais le rsultat est identique. Une chane de caractres peut comporter nimporte quel caractre, y compris les caractres spciaux dcrits section 2.2.2 page 16. La concatnation de deux chanes de caractres est ralise par loprateur +. Les autres oprations sont ralises par les mthodes de la classe String : charAt(index ) retourne le caractre (type char) situ dans la chane la position index (comprise entre 0 et length() - 1. compareTo(autre chane ) et compareToIgnoreCase(autre chane ) comparent la chane courante avec celle passe en argument (sans tenir compte de la casse pour la seconde). Retournent 0 si les chanes sont gales, un entier ngatif si la chane courante est avant largument, selon lordre alphabtique, et un nombre positif sinon. endsWith(sous-chane ) retourne true si la chane courante se termine par celle passe en argument. startsWith(sous-chane ) retourne true si la chane courante commence par celle passe en argument. indexOf(sous-chane ) recherche la premire occurrence de la sous-chane passe en argument, dans la chane courante. Retourne lindex du premier caractre de la sous-chane dans la chane courante en cas de succs, et -1 sinon. length() retourne la longueur de la chane. replace(ancien caractre, nouveau caractre ) remplace toutes les occurrences du caractre pass en premier argument par le caractre pass en second argument. substring(dbut, fin ) permet dextraire la sous-chane dfinie par lindex de son premier caractre (premier argument) et celui du premier caractre ne pas conserver (deuxime argument). On omet

38/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Tableaux et chanes de caractres

le second argument pour extraire la fin de la chane. toLowerCase() et toUpperCase() mettent les caractres dune chane en minuscules ou en majuscules. trim() limine les espaces ventuels en dbut et en fin de chane.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

39/59

Tableaux et chanes de caractres

40/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Traitement des erreurs : les exceptions

Chapitre 6 Traitement des erreurs : les exceptions


6.1 Principe
Lorsquune erreur dexcution se produit, un objet particulier (une exception) est cr. Java quitte alors le bloc dinstructions ayant conduit lerreur : lexception est jete (throw) en dehors de ce bloc. Java recherche sil existe aprs ce bloc des instructions capables dattraper (catch) lexception pour la traiter. En cas dchec, il quitte le bloc o il se trouve pour rechercher des instructions de traitement aprs, et ce jusqu ce quil ny ait plus de bloc ; dans ce cas le traitement de lexception est confi linterprteur.

6.2 La hirarchie des exceptions


La classe Throwable dfinie dans le package java.lang contient deux sous-classes : la classe Error qui correspond aux erreurs trop graves pour tre traites par le programmeur, et la classe Exception qui contient toutes les exceptions prdfinies. Comme pour toutes les exceptions, elle possde deux constructeurs, lun avec un argument String dfinissant un message derreur, et lautre sans argument (identique un argument null). La classe Throwable dfinit des mthodes utilisables sur toutes les exceptions : printStackTrace() affiche des informations sur lexception : type, message derreur, endroit o lexception a t cre. getMessage() retourne lventuel message pass au constructeur, ou null. fillInStackTrace() remplace linformation sur lendroit de cration de lexception par celle sur lendroit dappel cette mthode.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

41/59

Traitement des erreurs : les exceptions

La classe Exception est dfinie dans le package java.lang. Elle possde de nombreuses sousclasses, dont RuntimeException, elle aussi dfinie dans java.lang. Le comportement normal de Java est de forcer le programmeur traiter chacune des exceptions que son programme peut produire. Sil veut reporter ce traitement des mthodes appelantes, ou linterprteur, il doit lindiquer explicitement. Cette obligation est leve pour RuntimeException et ses sous-classes. Parmi ces sous classes, on trouve ArithmeticException, cre en cas de problme de calcul ; ArrayStoreException, cre si on tente de mettre dans un tableau un objet de type inadapt ; ClassCastException, cre si on veut faire un casting impossible ; NegativeArraySizeException, cre si on tente de crer un tableau de dimension ngative ; NullPointerException, cre si on utilise un handle null pour accder un objet. Toutes ces sous-classes sont dans java.lang.

6.3 Syntaxe
import java.io.*; class Err3 { public static void main(String[] argv) { int x, y, z=0; try { x = demander("Numrateur : "); y = demander("Dnominateur : "); z = calcul(x, y); } catch (ArithmeticException e) { System.out.println("Erreur : division par zro"); throw e; } catch (IOException e) { System.out.println("Erreur de lecture"); System.exit(0); } System.out.println("Rsultat = " + z); } static int calcul(int a, int b) { return a/b; } static int demander(String s) throws IOException { System.out.print(s); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); return (new Integer(br.readLine())).intValue(); } }

42/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Traitement des erreurs : les exceptions

Les instructions susceptibles de causer des erreurs sont regroupes dans un bloc annonc par le mot try. Si une erreur se produit, lexcution est interrompue, et Java se positionne juste aprs la recherche de pseudo-mthodes catch, et, parmi elles, de celle (la premire trouve) dont largument possde le mme type que lexception gnre par lerreur, ou un type parent. En cas dchec, il quitte le bloc courant (ici la mthode main) et recommence au niveau suprieur tant que cest possible, ou passe le contrle linterprteur. Le premier type dexception trait est une ArithmeticException. Cest en ralit dans la mthode calcul que lerreur (une division par zro) peut se produire. Si cest le cas, Java doit crer lexception, quitter le bloc dfini par la mthode calcul, rejoindre le bloc try, le quitter son tour pour trouver le catch adquat. Il na pas t ncessaire dautoriser Java quitter le bloc de la mthode calcul en cas derreur, car ArithmeticException est fille de RuntimeException. Le traitement de lerreur consiste en un message, suivi de la propagation de lerreur au niveau suprieur, ici linterprteur. Cette propagation est obtenue par linstruction throw suivie de lexception propager. Cette instruction peut tre utilise avec toute exception et nimporte o. En labsence dinstruction throw, le programme aurait continu ensuite normalement. Le deuxime type dexception est une IOException obtenue en cas derreur dentre-sortie (se reporter au chapitre 7 page 45). Une erreur de lecture peut se produire dans la mthode demander. Mais, puisque IOException nest pas fille de RuntimeException, il faut donner explicitement Java le droit de quitter la mthode en cas derreur. Il faut, aprs le nom et les arguments de la mthode, ajouter le mot throws suivi du ou des types dexceptions (spars par des virgules) autoriss quitter la mthode. Le traitement consiste en un message suivi de larrt du programme obtenu par la mthode System.exit(0);

6.4 Crer ses propres exceptions


Il est possible de crer de nouvelles exceptions, cest dire des sous-classes de la classe Exception, ou de ses descendants. Ces nouvelles exceptions peuvent tre filles ou non de RuntimeException ou dun de ses descendants.
import java.io.*; class Err5 { public static void main(String[] argv) { int x, y, z=0; try { x = demander("Numrateur : "); y = demander("Dnominateur : "); z = calcul(x, y); } catch (IOException e) { System.out.println("Erreur de lecture"); System.exit(0);

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

43/59

Traitement des erreurs : les exceptions } catch (NbNegatifException e) { e.printStackTrace(); throw e; } catch (ArithmeticException e) { System.out.println("Erreur : division par zro"); throw e; } System.out.println("Rsultat = " + z); } static int calcul(int a, int b) { return a/b; } static int demander(String s) throws IOException { System.out.print(s); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int i = (new Integer(br.readLine())).intValue(); if (i < 0) { throw new NbNegatifException("Valeur " + i + " ngative"); } return i; } } class NbNegatifException extends ArithmeticException { NbNegatifException (String s) { super(s); } }

Dans cet exemple, on veut que les valeurs entres soient positives ou nulles. On cre un nouveau type dexception, NbNegatifException, comme une classe fille de ArithmeticException (qui descend elle-mme de RuntimeException). Cette classe ne contient quun constructeur avec une chane de caractres en argument. Ce constructeur appelle celui de la classe parente avec cet argument. La mthode demander teste la valeur introduite au clavier. Si elle est ngative, elle dclenche lenvoi dune exception NbNegatifException laide de linstruction throw.

44/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les entres-sorties

Chapitre 7 Les entres-sorties


7.1 Principe gnral
Une entre-sortie est un transfert dinformation entre une source et une destination. Pour raliser une entre-sortie, il faut ouvrir un flux de communication (un stream) entre la source et la destination, faire transiter les informations travers le stream (on parle de lecture ou dcriture), puis fermer le stream de communication. Les classes de streams sont dfinies dans le package java.io, qui doit tre import explicitement. Les exceptions qui peuvent tre gnres par les oprations dentre-sortie sont du type IOException ou ses sous-classes. Ce ne sont pas des sous-classes de RuntimeException : elles doivent tre traites, ou il faut indiquer explicitement quelles ne le sont pas.

7.2 Streams pour donnes binaires


7.2.1 Streams dentre
Ils drivent de la classe InputStream du package java.io. Ils permettent la lecture dune squence doctets ou bytes. Louverture dun stream est ralise par la cration dune instance de la classe. Principales mthodes dfinies sur InputStream : read() lit le byte suivant du fichier (ou de la source de donnes) et le retourne sous forme dun entier int compris entre 0 et 255. En cas de fin de fichier, retourne la valeur -1, mais pas dexception. read(tableau de bytes ) lit plusieurs bytes du fichier pour remplir le tableau pass en argument. Le tableau est de type byte. La mthode retourne le nombre de bytes lus, ou -1 si aucun byte ne peut tre lu en raison de la fin du fichier. A chaque lecture, Java lit autant de bytes que la longueur du tableau, moins quil natteigne la fin du fichier.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

45/59

Les entres-sorties

reset() remet la tte de lecture en dbut de fichier. close() ferme le stream. Le champ in de la classe System est un InputStream dj ouvert. Il sagit du stream dentre standard , permettant la lecture de donnes frappes au clavier. Les principaux streams sont : FileInputStream est le stream qui permet la lecture de fichiers squentiels binaires dont le principal constructeur a pour argument le nom complet du fichier lire sous forme dune chane de caractres (String). Ce stream est gnralement combin avec une bufferisation (BufferedInputStream). ObjectInputStream relit des objets (ou des types lmentaires) Java crits auparavant via un stream ObjectOutputStream. Les types dobjets susceptibles dtre lus et crits sont dits srialisables : ils doivent hriter de linterface Serializable. Le constructeur principal a pour argument un InputStream, en gnral un FileInputStream. Parmi les mthodes spcifiques, la plus importante est readObject() qui permet de lire un objet. Le rsultat est de type Object, et un sous-casting explicite est en gnral ncessaire. En cas de fin de fichier, on obtient une exception EOFException. FilterInputStream est la classe parente dun ensemble de classes de streams de traitement de donnes. Les constructeurs ont tous comme argument un InputStream, le stream qui fournit les donnes sur lesquelles faire le traitement. Les principales sous-classes sont : DataInputStream permet la lecture des types lmentaires partir dun InputStream par les mthodes readBoolean(), readChar(), readDouble(), readFloat(), readInt() et readLong(). BufferedInputStream permet de bufferiser la lecture, cest dire de lire tout un buffer, plutt quun byte la fois. Sauf cas particulier, on bufferise toujours les lectures. Le constructeur principal possde en argument lInputStream bufferiser. InflaterInputStream classe parente de classes permettant de lire des fichiers compresss. Contrairement aux autres streams, elle est dfinie dans le package java.util.zip. Pour le type zip (windows), on utilise la classe ZipInputStream du package java.util.zip. Pour le type gzip (unix), on utilise la classe GZIPInputStream du package java.util.zip. Pour le type jar (archives Java), on utilise la classe JarInputStream du package java.util.jar.

46/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les entres-sorties

7.2.2 Streams de sortie


Ils drivent de la classe OutputStream du package java.io. Ils permettent lcriture dune squence doctets ou bytes. Louverture dun stream est ralise par la cration dune instance de la classe. Principales mthodes dfinies sur OutputStream : write(byte ) crit le byte (int compris entre 0 et 255) pass en argument la fin du fichier. write(tableau de bytes ) crit tous les bytes du tableau pass en argument. Le tableau est de type byte. flush() force lcriture relle dans le fichier en cas dcriture bufferise. close() ferme le stream. Les principaux streams sont : FileOutputStream est le stream qui permet lcriture dans des fichiers squentiels binaires. Le constructeur principal possde en argument le nom complet du fichier. Lajout dun deuxime argument true permet de complter un fichier existant, plutt que de le dtruire. Ce stream est gnralement combin avec une bufferisation (BufferedOutputStream). ObjectOutputStream crit des objets (ou des types lmentaires) Java. La relecture devra se faire via un ObjectInputStream. Les types dobjets susceptibles dtre crits et relus doivent tre srialisables : ils doivent hriter de linterface Serializable. Le constructeur normal a pour argument un OutputStream, en gnral un FileOutputStream. Parmi les mthodes spcifiques, la plus importante est writeObject(objet ) qui permet dcrire un objet.
import java.io.*; class LecEcr { public static void main(String[] argv) throws IOException, ClassNotFoundException { Cl2 c2 = new Cl2(10); ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("cl2.out"))); out.writeObject("Ecriture d'un objet Cl2"); out.writeObject(c2); out.close(); ObjectInputStream in = new ObjectInputStream( new BufferedInputStream( new FileInputStream("cl2.out")));

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

47/59

Les entres-sorties String s = (String)in.readObject(); Cl2 cl = (Cl2)in.readObject(); System.out.println("Rsultat s = " + s + "\nObjet " + cl); } } class Cl1 implements Serializable { private int i; Cl1(int x) {i=x;} public String toString() {return " Cl1, i = " + i;} } class Cl2 implements Serializable { private int i; private Cl1 c1; Cl2 (int x) {i=2*x; c1= new Cl1(x);} public String toString() {return "Cl2, i = " + i + c1;} }

FilterOutputStream est la classe parente dun ensemble de classes de streams de traitement de donnes. Les constructeurs ont tous comme argument un OutputStream, le stream qui dfinit la destination des donnes traites. Les principales classes de streams sont : DataOutputStream permet lcriture de donnes de types lmentaires vers un OutputStream par les mthodes writeBoolean(boolen ), writeChar(caractre ), writeDouble(nombre double ), writeFloat(nombre float ), writeInt(nombre int ) et writeLong(nombre long ). BufferedOutputStream permet de bufferiser lcriture. PrintStream permet le formatage de donnes en binaire, en fonction du systme hte. Le constructeur a pour argument lOutputStream vers lequel envoyer les donnes. Sa mthode print(valeur ) permet dcrire sous forme de bytes les types lmentaires, les chanes de caractres et les autres objets. La mthode println(valeur ) est identique, mais ajoute un caractre fin de ligne (gnralement \n). Les champs out et err de la classe System sont des PrintStream dj ouverts. Il sagit du stream de sortie standard et du stream daffichage des erreurs , permettant lcriture de donnes ou de messages derreurs lcran. DeflaterOutputStream classe parente de classes permettant dcrire des fichiers compresss. Contrairement aux autres streams, elle est dfinie dans le package java.util.zip. Pour le type zip (windows), on utilise la classe ZipOutputStream du package java.util.zip. Pour le type gzip (unix), on utilise la classe GZIPOutputStream du package java.util.zip. Pour le type jar (archives Java), on utilise la classe JarOutputStream du package java.util.jar. 48/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les entres-sorties

7.3 Streams pour donnes textuelles


Les donnes textuelles se diffrencient des donnes binaires par le fait que les caractres y sont cods sur 16 bits, alors que les bytes des donnes binaires sont des octets.

7.3.1 Streams dentre


Ils drivent de la classe Reader du package java.io. Les principales mthodes de cette classe sont : read() lit le caractre suivant du fichier (ou de la source de donnes) et le retourne sous forme dun entier int compris entre 0 et 65535. En cas de fin de fichier, retourne la valeur -1, mais pas dexception. read(tableau de caractres ) lit plusieurs caractres du fichier pour remplir le tableau pass en argument. Le tableau est de type char. La mthode retourne le nombre de caractres lus, ou -1 si aucun caractre ne peut tre lu en raison de la fin du fichier. reset() remet la tte de lecture en dbut de fichier. close() ferme le stream. Les principaux streams sont : FileReader est le stream qui permet la lecture de fichiers de caractres squentiels dont le principal constructeur a pour argument le nom complet du fichier lire sous forme dune chane de caractres. Ce stream est gnralement combin avec une bufferisation (BufferedReader). StringReader utilise une chane de caractres comme source de donnes. Le constructeur possde en argument la chane String utiliser comme source. InputStreamReader permet de passer dun stream binaire (InputStream) un stream textuel (Reader). Son constructeur possde en argument lInputStream convertir en stream textuel. BufferedReader permet de bufferiser la lecture. Le constructeur principal possde en argument le Reader bufferiser. Ce stream propose une mthode readLine() pour lire une ligne de texte. Le rsultat de cette mthode est un String, contenant la ligne de texte sans le caractre de fin de ligne, ou null si la fin du stream a t atteinte.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

49/59

Les entres-sorties

7.3.2 Streams de sortie


Ils drivent de la classe Writer du package java.io. Ses principales mthodes sont : write(caractre ) crit le caractre (int compris entre 0 et 65535) pass en argument la fin du fichier. write(tableau de caractres ) crit tous les caractres du tableau pass en argument. Le tableau est de type char. write(chane de caractres ) crit la chane de caractres String passe en argument. flush() force lcriture relle dans le fichier en cas dcriture bufferise. close() ferme le stream. Les principaux streams sont : FileWriter est le stream qui permet lcriture dans des fichiers textuels squentiels. Le constructeur principal possde en argument le nom complet du fichier. Lajout dun deuxime argument true permet de complter un fichier existant, plutt que de le dtruire. Ce stream est gnralement combin avec une bufferisation (BufferedWriter).
import java.io.*; class Copie { public static void main(String[] argv) throws IOException { int carin; String nomlec = demander("Fichier copier "); String nomecr = demander("Fichier rsultat "); BufferedReader in = new BufferedReader(new FileReader(nomlec)); BufferedWriter out = new BufferedWriter(new FileWriter(nomecr)); while ((carin = in.read()) != -1) out.write(carin); in.close(); out.close(); } static int demander(String s) throws IOException { System.out.print(s); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); return br.readLine(); } }

StringWriter utilise une chane de caractres (type String) comme destination de donnes. Le constructeur sans argument cre une chane rceptrice dont la taille est modifiable dynamiquement. La mthode toString() retourne la chane de caractres crite via le stream.

50/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Les entres-sorties

PrintWriter permet de formater les caractres crits. Le constructeur a pour argument soit un OutputStream, soit un Writer, ce qui permet de faire les critures soit dans un fichier binaire, soit dans un fichier texte. Sa mthode print(valeur ) permet dcrire sous forme de caractres les types lmentaires, les chanes de caractres et les autres objets. La mthode println(valeur ) est identique, mais elle ajoute un caractre fin de ligne (gnralement \n). OutputStreamWriter permet de passer dun stream textuel (Writer) un stream binaire (OutputStream). Son constructeur possde en argument lOutputStream binaire. BufferedWriter permet de bufferiser lcriture. Le constructeur principal possde en argument le stream Writer, o envoyer les caractres bufferiser. Ce stream propose une mthode newLine() pour crire un saut de ligne.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

51/59

Les entres-sorties

52/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Applets et fentres

Chapitre 8 Applets et fentres


8.1 Les applets
Un applet est un programme attach une page HTML. Elle doit hriter de la classe Applet dfinie dans le package java.applet. Cette classe dfinit plusieurs mthodes appeles automatiquement dans certaines circonstances.

Mthode init() start() stop() destroy()

Opration Appele lors du premier chargement de lapplet. Permet de faire les premires initialisations Appele aprs init(), et lorsque la page contenant lapplet est raffiche aprs avoir t quitte Appele lorsque la page contenant lapplet est quitte Appele lorsque le navigateur est quitt

En gnral, on se contente de dfinir la mthode init().

8.2 Les composants graphiques


Nous ne dcrivons ici que les objets graphiques les plus lmentaires qui hritent de la classe Component du package java.awt. Le package javax.swing comporte un plus grand nombre dobjets (se reporter la documentation en ligne) et, dune certaine faon, inclut ceux de awt ; ainsi, la classe Button de awt se retrouve de manire enrichie sous le nom JButton dans swing. On y trouve en particulier : Button classe permettant dafficher des boutons cliquables .

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

53/59

Applets et fentres

Le constructeur habituel a pour argument le libell quon veut afficher sur le bouton. Canvas classe dfinissant une zone vide rectangulaire sur laquelle lapplication peut crire, ou aller chercher de linformation. Checkbox classe permettant de dfinir des cases cocher . Une telle case est dans ltat coch (checked) ou non coch . Le constructeur possde 0, 1, 2 ou 3 paramtres. Le premier est le libell de la case. Le second est ltat initial de la case : true pour coch, et false pour non coch (par dfaut). Le troisime est le groupe (pas de groupe par dfaut). Lorsque plusieurs cases font partie dun mme groupe, elles deviennent des boutons radio dont un seul peut tre coch. Un groupe est une instance de la classe CheckboxGroup, dfinie dans le package java.awt. Choice classe permettant de grer un pop-up menu de valeurs possibles. Le constructeur ne possde pas dargument. La liste des valeurs se construit en pas pas par la mthode addItem(String) o largument est la chane de caractres constituant litem ; getItemCount() retrouve le nombre ditems de la liste ; getSelectedIndex() retourne lindice de litem slectionn (0 pour le premier item) ; et getSelectedItem() retourne la chane correspondante. Container classe permettant de contenir dautres composants . Les composants sont ajouts par la mthode add dcrite ci-dessous. Parmi ceux quelle peut contenir, on trouve : Panel sous-classe la plus simple qui dfinit un espace dans lequel lapplication peut insrer nimporte quel autre composant, y compris un autre Panel. La classe Applet est un descendant de la classe Panel. Window sous-classe dfinissant une fentre, sans bord ni barre de menu. Label classe permettant dafficher une ligne de texte non ditable dans un Container. Le constructeur possde en gnral un argument, la chane de caractres constituant le label. List classe permettant de grer une liste de valeurs possibles . Contrairement au pop-up menu (Choice), plusieurs des valeurs possibles sont prsentes dans une sous-fentre et on peut autoriser lutilisateur slectionner plusieurs des valeurs. Le premier argument du constructeur est le nombre de lignes visibles dans la sous-fentre. Mettre true en deuxime argument (optionnel) autorise le choix multiple. Les valeurs possibles sont insres dans la liste laide de la mthode addItem(String) (remplace par add(String) depuis la version 1.1). getSelectedIndexes() retourne le tableau des indices des items slectionns. getSelectedItems() retourne le tableau des chanes de caractres slectionnes. TextComponent classe permettant de grer du texte ditable . Elle contient deux sous-classes :

54/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Applets et fentres

TextArea qui permet laffichage et ldition de plusieurs lignes de texte dans une sous-fentre. Le constructeur peut tre utilis avec un argument, le texte afficher. Les deuxime et troisime arguments optionnels sont les nombres de lignes et de colonnes. On peut ajouter un dernier argument pour grer la prsence dascenseurs. Ses valeurs possibles sont TextArea.SCROLLBARS_NONE pour interdire les ascenseurs, TextArea.SCROLLBARS_HORIZONTAL_ONLY ou TextArea.SCROLLBARS_VERTICAL_ONLY pour avoir un ascenseur horizontal ou vertical, et TextArea.SCROLLBARS_BOTH pour avoir les deux (par dfaut). TextField qui permet laffichage et ldition dune simple ligne de texte. Parmi les mthodes utilisables dans les deux sous-classes, on trouve getText() qui retourne le texte affich, getSelectedText() qui retourne la partie de texte slectionne, setText(String) qui remplace le texte, et setEditable(boolean) qui permet dautoriser (argument true) ou dinterdire (argument false) ldition par lutilisateur du texte affich. Pour TextArea, on peut aussi utiliser append(String) qui ajoute la fin du texte affich celui pass en argument.

8.3 Afficher des lments graphiques


Pour ajouter un composant graphique un Container, par exemple sur la fentre de lapplet, on utilisera la mthode add(Component), dont largument est lobjet ajouter. Les composants sont ajouts les uns la suite des autres, et affichs de mme. Le contrle de cet affichage est en fait ralis par un layout manager . La classe Container possde une mthode setLayout(LayoutManager) qui permet de choisir le type de contrle. Largument est une instance dun layout manager. Les principales classes de layout manager sont les suivantes : FlowLayout Affiche des lignes centres de composants. Cest le layout manager utilis par dfaut. BorderLayout Divise la fentre de lapplet en 5 zones nommes North, South, East, West, et Center. La mthode add est utilise avec deux arguments. Le premier est le nom de la zone o afficher un composant, entre guillemets, et majuscule comprise. Une zone ne peut afficher quun lment graphique, mais ce peut tre un Container possdant son propre layout manager. GridLayout Dfinit un tableau avec des lignes et des colonnes. Les cellules du tableau sont remplies tour tour par chaque appel de add. Le changement de ligne nest ralis que lorsque la ligne prcdente est complte. Le constructeur de ce layout manager possde deux arguments : le nombre de lignes et le nombre de colonnes.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

55/59

Applets et fentres

8.4 Les vnements


8.4.1 Le modle
Pour chaque lment graphique, on doit dclarer explicitement les vnements qui sont pris en compte, et les actions quils dclenchent. Il faut attacher un couteur dvnement llment graphique ; et crire la mthode dclencher lorsque lvnement se produit. On utilise des classes et des interfaces du package java.awt.event. Pour dfinir un couteur dvnement, il faut crer une classe qui implmente une interface spcifique lvnement. Par exemple linterface FocusListener est adapte un vnement Focus (un FocusEvent). Ces interfaces prdfinissent des mthodes appeles lorsque lvnement se produit. Ainsi FocusListener prdfinit les mthodes focusGained et focusLost invoques respectivement quand le focus du clavier (position dinsertion du prochain caractre) est positionn ou retir dun lment graphique. Pour attacher un couteur dvnement un lment graphique, on utilise sa mthode addXxx Listener() o Xxx est le type dvnement cout. Par exemple, si lvnement est de type Action (cest un ActionEvent), lcouteur est attach par la mthode addActionListener(). La mthode addXxx Listener() possde en argument un objet instance de la classe dfinissant lcouteur dvnement. Cet objet permet de grer lcoute et possde les mthodes dfinissant les actions dclencher.

8.4.2 Elments graphiques et vnements


Reprenons les lments graphiques qui ont t introduits, et donnons pour chacun les principaux vnements quils peuvent couter Button ActionEvent Gnr lorsque la souris est clique puis relache sur le bouton. Linterface ActionListener ne possde que la mthode actionPerformed dont largument est lvnement ActionEvent dclencheur. On attache un vnement ActionEvent un bouton (ou un autre lment graphique) par la mthode addActionListener. FocusEvent Gnr lorsque le bouton prend ou perd le focus. Linterface FocusListener possde deux mthodes, dont largument est lvnement FocusEvent dclencheur : focusGained dclenche lorsque le bouton (ou llment graphique) prend le focus, et focusLost dclenche lorsquil perd le focus. Plutt quimplmenter linterface, ce qui impose de dfinir les deux mthodes, on peut h56/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Applets et fentres

riter de la classe FocusAdapter qui les prdfinit comme ne faisant rien. On attache un vnement FocusEvent un bouton (ou un autre lment graphique) par la mthode addFocusListener. KeyEvent Gnr lorsquune touche du clavier a t utilise. Linterface KeyListener possde trois mthodes, dont largument est lvnement KeyEvent dclencheur : keyPressed dclenche lorsquune touche est enfonce, keyReleased lorsque la touche est relache, et keyTyped dclenche lorsque la touche a t tape. Plutt quimplmenter linterface, on peut hriter de la classe KeyAdapter qui prdfinit les 3 mthodes comme ne faisant rien. On attache un vnement KeyEvent un bouton (ou un autre lment graphique) par la mthode addKeyListener. MouseEvent Gnr par certaines actions de la souris. Il existe deux interfaces utiles : MouseListener et MouseMotionListener. La premire possde cinq mthodes : mouseClicked (souris clique sur le bouton ou llment graphique), mouseEntered (pointeur de la souris entr sur llment graphique), mouseExited (pointeur de la souris sorti de llment graphique), mousePressed (un bouton souris enfonc sur llment graphique) et mouseReleased (bouton souris relach). La seconde interface possde deux mthodes : mouseMoved (souris dplace) et mouseDragged (souris clique sur llment graphique, puis dplace). Toutes ces mthodes ont pour argument lvnement MouseEvent dclencheur. Plutt que des interfaces, on pourra hriter de MouseAdapter ou de MouseMotionAdapter pour viter de dfinir toutes les mthodes. On attache un vnement MouseEvent un bouton (ou un autre lment graphique) par la mthode addMouseListener et/ou addMouseMotionListener. Canvas FocusEvent Gnr lorsque la zone du Canvas prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise dans la zone du Canvas. MouseEvent Gnr par certaines actions de la souris sur le Canvas. Checkbox ItemEvent Gnr lorsque la case (ou un item de liste) change dtat : passage de non coch (ou non slectionn) coch (ou slectionn), ou linverse. Linterface ItemListener ne possde que la mthode itemStateChanged dont largument est lvnement ItemEvent dclencheur. On attache un vnement ItemEvent une case cocher (ou un autre lment graphique) par la mthode addItemListener. FocusEvent Gnr lorsque la case cocher prend ou perd le focus.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

57/59

Applets et fentres

KeyEvent Gnr lorsquune touche du clavier a t utilise sur la case cocher. MouseEvent Gnr par certaines actions de la souris sur la case cocher. Choice ItemEvent Gnr lorsquune des possibilits de choix passe de non slectionne slectionne, ou linverse. Un vnement ItemEvent possde la mthode getItem() indiquant litem affect par le changement. FocusEvent Gnr lorsque la zone de choix prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise sur la zone de choix. MouseEvent Gnr par certaines actions de la souris sur la zone de choix. Container FocusEvent Gnr lorsque le Container prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise dans le Container. MouseEvent Gnr par certaines actions de la souris sur le Container. WindowEvent (uniquement pour un lment Window) Gnr par certaines actions sur la fentre. Linterface WindowListener possde sept mthodes : windowActivated (fentre active, donc recevant la frappe au clavier), windowClosed (fentre ferme par sa mthode dispose()), windowClosing (fermeture de la fentre par lutilisateur), windowDeactivated (fentre dsactive), windowIconified (mise en icone de la fentre), windowDeiconified (dsiconification de la fentre) et windowOpened (premire ouverture de la fentre). Toutes ces mthodes ont pour argument lvnement WindowEvent dclencheur. Plutt que dimplmenter WindowListener, on peut hriter de WindowAdapter ce qui vite de dfinir toutes les mthodes. On attache un vnement WindowEvent une fentre par la mthode addWindowListener. Label FocusEvent Gnr lorsque la zone du Label prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise dans la zone du Label. MouseEvent Gnr par certaines actions de la souris sur la zone du Label.

58/59

La programmation Java : aide mmoire - Vincent Morice

2013 - 2014

Applets et fentres

List ActionEvent Gnr lorsquune action comme un double clic est excute sur un lment de la liste. ItemEvent Gnr lorsquune des possibilits de choix passe de non slectionne slectionne, ou linverse. Un vnement ItemEvent possde la mthode getItem() indiquant litem affect par le changement. FocusEvent Gnr lorsque la zone de choix prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise sur la zone de choix. MouseEvent Gnr par certaines actions de la souris sur la zone de choix. TextComponent TextEvent Gnr lorsque le texte du composant a t modifi. Linterface TextListener ne possde que la mthode textValueChanged, dclenche lorsque le texte a t modifi. Cette mthode a pour argument lvnement TextEvent dclencheur. On attache un vnement TextEvent un composant de texte par la mthode addTextListener. FocusEvent Gnr lorsque la zone de texte prend ou perd le focus. KeyEvent Gnr lorsquune touche du clavier a t utilise dans la zone de texte. MouseEvent Gnr par certaines actions de la souris sur la zone de texte. ActionEvent (uniquement pour un lment TextField) Gnr lorsquune action comme un return est excute sur la zone de texte.

2013 - 2014

La programmation Java : aide mmoire - Vincent Morice

59/59

You might also like