Vous êtes sur la page 1sur 210

Cours Java

Dr. Abdessamad Belangour

Chapitre 1
Vue densemble de la plateforme Java

Introduction
 Java est une technologie dvelopp par Sun en 1995
qui comprend :
 Un langage de programmation
 Une plateforme : environnement logiciel dans lequel
les programmes java s'excutent.

 Dfinition de Sun :
 Java : a simple, object-oriented, distributed, robust,
secure, architecture neutral, portable, highperformance, multithreaded, and dynamic language

 Prsente dans de trs nombreux domaines


dapplication des serveurs dapplications aux
tlphone portables et cartes puces :
 vers 5 millions de dveloppeurs en 2006.

Java - Dr A. Belangour

La plateforme Java (1)


 Une plateforme est un environnement
matriel et/ou logiciel dans lequel un
programme tourne.
 La plupart des plateformes peuvent tre
dcrits comme une combinaison du
systme dexploitation et du matriel sousjacent.
 La plateforme Java est une plateforme
purement logiciel qui tourne sur dautres
plateforme bas sur le matriel.

Java - Dr A. Belangour

La plateforme Java (2)


 La plateforme Java a deux composants :
 La Machine Virtuelle Java (Java Virtual Machine) :
programme permettant d'interprter et d'excuter le
bytecode Java (proche du langage machine).
 LAPI Java (Java Application Programming Interface):
une collection de composants rutilisables regroups
en bibliothques ( des classes et interfaces) connus
par Packages.

Java - Dr A. Belangour

Java : de ldition lexcution (1)


 Dans le langage Java, le code source est crit dans un
fichier texte avec extension .java.
 Ce fichier texte est ensuite compil vers un fichier avec
extension .class avec le compilateur javac.
 Ce fichier contient du code intermdiaire (bytecode)
indpendant de toutes plateformes.
 lexcution, ce code est traduit en code natif, par la
machine virtuelle java, selon le systme dexploitation.

Java - Dr A. Belangour

Java : de ldition lexcution (2)


 La machine virtuelle Java
est disponible pour
plusieurs systmes
dexploitation,
 La JVM est contenue
dans un framework
dexcution appel JRE
(Java Runtime
Environment).
 les mmes fichiers .class
sont capable de tourner
sur plusieurs plateformes
: Microsoft Windows,
Solaris OS, Linux, ou
Mac OS.

Java - Dr A. Belangour

Java : les ditions


 Trois ditions de Java existent (jusqu la
version 5.0):
 J2ME : Java 2 Micro Edition
 Prvu pour le dveloppement d'applications
embarques, notamment sur des assistants
personnels et terminaux mobiles..
 J2SE : Java 2 Standard Edition
 Destin au dveloppement d'applications pour
ordinateurs personnels ;
 J2EE : Java 2 Entreprise Edition
 Destin un usage professionnel avec la mise
en oeuvre de serveurs.

Java - Dr A. Belangour

Le Java SE Development Kit


 Pour excuter une application dveloppe
avec Java, il faut tlcharger le JRE.
 Cependant, pour le dveloppeurs il faut
tlcharger le kit de dveloppement Java
(JDK).
 Le JDK est le kit de dveloppement de
rfrence, distribu gratuitement sur
Internet par Sun.
 La version courante du JDK est JDK SE 6
Update 18

Java - Dr A. Belangour

Le Java SE Development Kit




Le JDK SE est compos d'un certain nombre d'outils, ne


disposant pas pour la plupart d'interfaces graphiques, dont
voici les principaux :





Javac : C'est le compilateur Java. Il traduit un fichier source


.java en un fichier excutable .class.
Java : Excute le ou les fichiers compils par Javac. C'est
l'interprteur Java, c'est--dire une implmentation de la
machine virtuelle Java.
AppletViewer : Ce programme permet d'excuter une Applet
Java sans ncessit d'utiliser un navigateur web. Il dispose
d'une interface graphique.
Javadoc : Outil permettant de construire, partir des
commentaires insrs dans des sources Java, une
documentation HTML.

Il contient aussi lenvironnement dexcution JRE (Java


Runtime Environment) qui permet d'excuter un
programme compil par Javac sans avoir besoin d'installer
tout le JDK.

Java - Dr A. Belangour

10

Java : volution des versions


 Le langage Java a connu plusieurs volutions depuis
le JDK (Java Development Kit) 1.0 avec l'ajout de
nombreuses classes et packages la bibliothque
standard.
 Depuis le J2SE1.4, l'volution de Java est dirige par
le JCP (Java Community Process) qui utilise les JSR
(Java Specifications Requests) pour proposer des
ajouts et des changements sur la plate-forme Java.
 Le langage est spcifi par le JLS (Java Specification
Language).
 Les modifications du JLS sont gres sous le code JSR
901

Java - Dr A. Belangour

11

Java : volution des versions


 JDK 1.0 (23 janvier 1996 - 211 classes et
interfaces) Version initiale.
 JDK 1.1 (19 fvrier 1997 - 477 classes et
interfaces) De nombreux ajouts.
 J2SE 1.2 (9 dcembre 1998 - 1524 classes
et interfaces) Nom de code Playground.
 Remarque :

 Cette version et les suivantes jusque J2SE 5.0


sont rebaptises Java 2 et la version nomme
J2SE remplace JDK pour distinguer la plateforme
de base de la version J2EE et de la version
J2ME.

Java - Dr A. Belangour

12

Java : volution des versions


 J2SE 1.3 (8 mai 2000 - 1840 classes et
interfaces) Nom de code Kestrel.
 J2SE 1.4 (6 fvrier 2002 - 2723 classes et
interfaces) Nom de code Merlin. Ce fut la
premire rvision de la plateforme sous JCP
(Java Community Process) JSR 59
 J2SE 5.0 (30 Septembre 2004 - 3270
classes et interfaces) Nom de code Tiger.
 Remarque :
 initialement numrote 1.5, qui est toujours
utilis comme numro de version interne.

Java - Dr A. Belangour

13

Java : volution des versions


 Java SE 6 (12 dcembre 2006 - 3777 classes et
interfaces) Nom de code Mustang.
 Remarque :
Avec cette version, Sun remplace le nom J2SE par
Java SE et supprime le .0 au numro de version.
 Les ditions de Java sont donc devenus


 Java Platform, Standard Edition 6


 Java Platform, Enterprise Edition 5
 Java Platform, Micro Edition

 Java SE 7 Nom de code Dolphin. Existe en version


beta. Sortie officielle prvue trs prochainement..

Java - Dr A. Belangour

14

Java : linstallation(0)

Java - Dr A. Belangour

15

Java : linstallation(1)
 tape 1 :

Java - Dr A. Belangour

16

Java : linstallation(2)
 tape 2 :

Java - Dr A. Belangour

17

Java : linstallation(3)
 tape 3 :

Java - Dr A. Belangour

18

Java : linstallation(4)
 tape 4 :

Java - Dr A. Belangour

19

Java : linstallation(5)
 tape 5 :

Java - Dr A. Belangour

20

10

Structure du JDK
 Le JDK a une structure comme :

 Les outils du JDK comme le java.exe ou le


javac.exe sont logs dans le rpertoire bin

Java - Dr A. Belangour

21

Variables denvironnements
 Afin de compiler un fichier
source java sous DOS de
nimporte quel dossier, il
faut ajouter ou modifier la
variable PATH
 Allez sous "Dmarrer >
Panneau de configuration >
Systme", cliquez sur
l'onglet "Avanc" puis sur
le bouton "Variables
d'environnement".

Java - Dr A. Belangour

22

11

Variables denvironnements
 Une fois cela fait,
cliquez sur le bouton
"nouveau" situ en
haut.
 Entrez ensuite la paire
suivante :
 Nom de la variable : path
 Valeur de la variable :
chemin complet du
dossier bin du JDK
(exemple
C:\jdk1.6.0_02\bin)

Java - Dr A. Belangour

23

Variables denvironnements
 Lorsquun programme Java a besoin
dune bibliothque particulire, alors
il faut ajouter la variable : ClassPath
 Cette variable doit pointer vers la
bibliothque(s) ou la classe(s) requise
par le programme Java.

Java - Dr A. Belangour

24

12

Premier programme Java !


public class Bonjour {
public static void main (String args[]) {
System.out.println("Bonjour tout le monde !");
}
}

1. crire le code source dans un diteur de texte


2. L'enregistrer dans le fichier nomm Bonjour.java
3. Le compiler par javac Bonjour.java, ce qui cre le fichier
Bonjour.class
4. L'excuter par la commande : java Bonjour (sans
l'extension .class)

Attention !
1. Le nom de la classe et du fichier doivent tre identique.
2. Java est sensible la casse Bonjour bonjour

Java - Dr A. Belangour

25

Premire Applet Java


import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet
{
public void paint(Graphics graphic)
{
graphic.drawString("Hello World!", 100, 50);
}
}

1.
2.
3.

crire le code source dans un diteur de texte


L'enregistrer dans le fichier nomm HelloWorld.java
Le compiler par javac HelloWorld.java, ce qui cre le
fichier HelloWorld.class

Java - Dr A. Belangour

26

13

Premire Applet Java


4.

Une applet Java ayant pour vocation d'tre insre dans un code
HTML , voici un exemple :
<HTML>
<HEAD>
<TITLE> Exemple d'applet Java </TITLE>
</HEAD>
<BODY> Voici une applet Java : <br>
<APPLET CODE="HelloWorld.class" WIDTH=400 HEIGHT=200>
</APPLET>
</BODY>
</HTML>

Remarque : Les applets n'ont pas besoin d'implmenter la mthode


main() . Ils peuvent la place implmenter une des mthodes
suivantes :

init : appele une fois la cration de l'applet;

start : appele aprs init et ensuite appele chaque fois que
l'applet a t stoppe (changement de page ou iconisation du
navigateur);

paint : appele chaque fois qu'il faut re-dessiner la fentre.

Java - Dr A. Belangour

27

Chapitre 2
lments de base du langage Java

14

Les rgles de base


 Java est sensible la casse.
 Les blocs de code sont encadrs par des accolades.
 Chaque instruction se termine par un point virgule (;).
 Une instruction peut tenir sur plusieurs lignes:
 Exemple :

char
code
=
'D';

 Remarque :


L'indentation permet une meilleur lisibilit du code.

Java - Dr A. Belangour

29

Les identificateurs
 Chaque objet, classe, programme ou variable est
associ un nom : un identificateur.
 Un identificateur peut se composer de tous les
caractres alphanumriques et des caractres _ et $.
 Le premier caractre doit tre une lettre, le caractre
de soulignement ou le signe dollar.
 Un identificateur ne peut pas appartenir la liste des
mots rserv du langage Java (ex: abstract, new,
return, try, )
Java - Dr A. Belangour

30

15

Les commentaires
 Ils sont saut par le compilateur (pas de ; la fin)
 Il existe trois types de commentaires en Java :
1. Monoligne. Exemple : int N=1; // dclaration du
compteur
2. Multiligne. Exemple : /* commentaires ligne 1
commentaires ligne 2 */
3. De documentation automatique.
Exemple :
/**
* commentaire de la mthode
* @param val la valeur a traiter
* @return Rien
* @deprecated Utiliser la nouvelle mthode XXX
*/
Java - Dr A. Belangour

31

Les variables : dclaration


 Une variable possde un nom, un type et une valeur.
 Pour utiliser une variable il faut la dclarer pour lui
rserver de la mmoire.
 Exemple : long nombre; int compteur; Date j;
 La valeur peut tre affecte plus loin dans le code.
 Une variable ne peut tre utilise que dans le bloc ou elle
est dclare.
 Un variable peut tre de type simple (int, long, etc..) ou
de type classe (String, Date, Personne,etc..)

Java - Dr A. Belangour

32

16

Les variables : dclaration


 Remarque :


Il est possible de dfinir plusieurs variables de mme type


en sparant chacune d'elles par une virgule.
 Exemple : int jour, mois, annee ;

Il est possible en une seule instruction de faire la


dclaration et l'affectation d'une valeur une variable ou
plusieurs variables.
 Exemple: int i=3 , j=4 ;

Java - Dr A. Belangour

33

Les variables :types lmentaires




Les types lmentaires ont une taille identique quelque soit la


plate-forme d'excution.

 c'est un des lments qui permet Java d'tre indpendant de la


plate-forme sur lequel le code s'excute.
Type

Dsignation

Longueur

Valeurs

Commentaires

boolean

valeur logique

1 bit

true ou false

pas de conversion
possible vers un autre
type

byte

octet sign

8 bits

-128 127

short

entier court
sign

16 bits

-32768 32767

char

caractre
Unicode

16 bits

\u0000 \uFFFF

Java - Dr A. Belangour

entour de cotes
simples dans du code
Java
34

17

Les variables :types lmentaires

Type

Dsignation

Longueur

Valeurs

int

entier sign

32 bits

-2147483648 2147483647

float

virgule flottante simple


prcision (IEEE754)

32 bits

1.401e-045 3.40282e+038

double

virgule flottante double


prcision (IEEE754)

64 bits

2.22507e-308 1.79769e+308

long

entier long

64 bits

-9223372036854775808
9223372036854775807

Java - Dr A. Belangour

35

Les variables : format des types


lmentaires


Le format des nombres entiers :




Les types byte, short, int et long peuvent tre cods en


dcimal, hexadcimal ou octal.

Un nombre hexadcimal, doit commencer par 0x.

Un nombre octal, doit commencer par zro.

Le suffixe l ou L permet de spcifier que c'est un entier long.

Le format des nombres dcimaux :




Les types float et double stockent des nombres flottants.

Ils doivent possder soit un point, un exposant ou l'un des


suffixes f, F, d, D.

Exemples : float pi = 3.141f; double v = 3d ;


float f = +.1f , d = 1e10f;
Java - Dr A. Belangour

36

18

Les variables : format des


types lmentaires
 Remarque :


Il est possible de prciser des nombres qui n'ont pas le


partie entire ou dcimale.

Par dfaut un littral est de type double : pour dfinir un


float il faut le suffixer par la lettre f ou F.

Exemple :double w = 1.1;

Attention ! float pi = 3.141; // provoque une erreur la


compilation

Java - Dr A. Belangour

37

Les variables : format des types


lmentaires
 Le format des caractres :


Un caractre est cod sur 16 bits car il est conforme la


norme Unicode.

Il doit tre entour par des apostrophes.

Une valeur de type char peut tre considre comme un


entier non ngatif de 0 65535.

Cependant la conversion implicite par affectation n'est pas


possible.

Java - Dr A. Belangour

38

19

Les variables : format des


types lmentaires
 Exemple :
class test1 {
public static void main (String args[])
{
char code = 'D';
int index = code - 'A';
System.out.println("index = " + index);
}
}

 Rsultat :
 index = 3

Java - Dr A. Belangour

39

Les variables : initialisation


 En Java, toute variable appartenant un objet est
initialise avec une valeur par dfaut en accord avec
son type au moment de la cration.
 Les valeurs par dfaut lors de l'initialisation sont :
 boolean : false
 byte, short, int, long : 0
 float, double : 0.0
 Char : \u000
 Classe : null
Java - Dr A. Belangour

40

20

Les variables : initialisation


 Remarques :


Cette initialisation ne s'applique pas aux variables locales


des mthodes de la classe.

Dans une applet, les dclarations et initialisations se font en


gnral dans la mthode init().

Java - Dr A. Belangour

41

Les variables : affectation




le signe = est l'oprateur d'affectation et s'utilise avec une


expression de la forme variable = expression.

L'opration d'affectation est associatif de droite gauche : il


renvoie la valeur affecte ce qui permet d'crire : x = y = z = 0;

Liste doprateurs abrge daffectation :

Oprateur

Exemple

a=10

+=

a+=10

a = a + 10

-=

a-=10

a = a - 10

*=

a*=10

a = a * 10

/=

a/=10

a = a / 10

%=

a%=10

Reste de la division

^=

a^=10

a = a ^ 10

Java - Dr A. Belangour

Signification

42

21

Les variables : comparaisons


 Java propose des oprateurs pour toutes les comparaisons :


> (strictement suprieur)

& (ET binaire )

< (strictement infrieur )

^ (OU exclusif binaire )

>= (suprieur ou gal )

| (OU binaire)

<=(infrieur ou gal )

?: (oprateur conditionnel)

== (egalit)

!= (diffrent de )

&& (ET logique)

|| (OU logique)

Exemple : a ? b : c
quivalent : si a alors b
sinon c

Remarque : b et c doivent
retourner le mme type

Java - Dr A. Belangour

43

Les variables : comparaisons




Les oprateurs sont excuts dans l'ordre suivant


l'intrieure d'une expression qui est analyse de gauche
droite:
1. incrments et dcrments
2. multiplication, division et reste de division (modulo)
3. addition et soustraction
4. comparaison
5. le signe = d'affectation d'une valeur une variable

L'usage des parenthses permet de modifier cet ordre de


priorit.
Java - Dr A. Belangour

44

22

Les oprations arithmtiques


 Les oprateurs arithmtiques se notent :


+ (addition)

- (soustraction)

* (multiplication)

/ (division)

% (reste de la division)

 Ils peuvent se combiner l'oprateur d'affectation.


 On distingue entre deux arithmtiques :


L'arithmtique entire

L'arithmtique en virgule flottante


Java - Dr A. Belangour

45

Les oprations arithmtiques


 L'arithmtique entire


conversion implicite vers le type int des types numriques


(promotion entire) pour renforcer la scurit du code

Exemple :
 short x= 5 , y = 15;
 x = x + y ; //erreur la compilation
 Incompatible type for =. Explicit cast needed to convert
int to short.
 x = x + y ; //erreur la compilation ^ 1 error

Java - Dr A. Belangour

46

23

Les oprations arithmtiques


 Explication :
 Les oprandes et le rsultat de l'opration sont
convertis en type int.
 Le rsultat est affect dans un type short : il y a donc
risque de perte d'informations et donc erreur la
compilation est mise
 Cette promotion vite un dbordement de capacit
sans que le programmeur soit pleinement conscient
du risque.

Java - Dr A. Belangour

47

Les oprations arithmtiques


 il est ncessaire, pour rgler le problme, d'utiliser
une conversion explicite ou cast :
 x = (short) ( x + y );
 Il est ncessaire de mettre l'opration entre parenthse
pour que ce soit son rsultat qui soit converti car le cast
a une priorit plus forte que les oprateurs
arithmtiques.

 Remarque :


La division par zro pour les types entiers lve l'exception


ArithmeticException

Java - Dr A. Belangour

48

24

Les oprations arithmtiques


 Exercice: crivez un programme dans lequel vous
essayerez de faire une division par zro dun entier.
Remarquez lexcution.

 Solution:
/* test sur la division par zero de nombres entiers */
class test3 {
public static void main (String args[]) {
int valeur=10;
double resultat = valeur / 0;
System.out.println("Resultat = " + resultat);
}
}

Java - Dr A. Belangour

49

Les oprations arithmtiques




L'arithmtique en virgule flottante




la division par zro des float ou double, ne produit


pas d'exception mais une des 3 valeurs spciales:
1. NaN (not a number : nombre non dfini):


Float.NaN ou Double.NaN

2. Infinity (+ : valeur positive suprieure au plafond


du type ):


Float.POSITIVE_INFINITY ou Double.POSITIVE_INFINITY

3. - Infinity (- : valeur ngative suprieure au plafond


du type):


Float.NEGATIVE_INFINITY ou Double.NEGATIVE_INFINITY
Java - Dr A. Belangour

50

25

Les oprations arithmtiques


 Exercice:


Tableau rcapitulatif

crivez un programme dans

X/Y

X%Y

lequel vous essayerez de

valeur finie

NaN

valeur finie

+/-

NaN

NaN

faire une division par zro


dun float. Remarquez

+/-

valeur finie

+/-

NaN

lexcution.

+/-

+/-

NaN

NaN

Solution : /* test sur la division par zero de nombres flottants */


class test2 {
public static void main (String args[]) {
float valeur=10f;
double rsultat = valeur / 0;
System.out.println(" Resultat = " + rsultat);
}
}
Java - Dr A. Belangour

51

Les oprations arithmtiques


 L'incrmentation et la dcrmentation
 Les oprateurs d'incrmentation et de
dcrmentation sont : n++, ++n , n-- , --n
 L'oprateur ++ (resp. --) renvoie la valeur avant
incrmentation s'il est postfix et aprs
incrmentation s'il est prfix.
 Exemple :
System.out.println(x++) System.out.println(x); x = x + 1;
System.out.println(++x) x = x + 1; System.out.println(x);

Java - Dr A. Belangour

52

26

Les oprations arithmtiques




Exercice : Quel sera le rsultat de lexcution du programme


suivant :

class test4 {
public static void main (String args[]) {
int n1=0; int n2=0;
System.out.println("n1 = " + n1 + " n2 = " + n2); n1=n2++;
System.out.println("n1 = " + n1 + " n2 = " + n2); n1=++n2;
System.out.println("n1 = " + n1 + " n2 = " + n2); n1=n1++;
System.out.println("n1 = " + n1 + " n2 = " + n2);
}
}

Java - Dr A. Belangour

53

Les oprations arithmtiques


 Rsultat:
 int n1=0; int n2=0;

 n1=0 n2=0

 n1=n2++;

 n1=0 n2=1

 n1=++n2;

 n1=2 n2=2

 n1=n1++;

 attention : n1 ne change pas de valeur

Java - Dr A. Belangour

54

27

La priorit des oprateurs




Priorits des oprateurs du plus au moins prioritaire :

1) les parenthses : ( )
2) les oprateurs d'incrmentation : ++ , -3) les oprateurs de multiplication, division, et modulo :*, / , %
4) les oprateurs d'addition et soustraction :+, 5) les oprateurs de dcalage : << et >>
6) les oprateurs de comparaison : < , >,<=,>=
7) les oprateurs d'galit : ==, !=
8) l'oprateur OU exclusif : ^
9) l'oprateur ET : &
10) l'oprateur OU : |
Java - Dr A. Belangour

55

La priorit des oprateurs


11) l'oprateur ET logique : &&
12) l'oprateur OU logique : ||
13) les oprateurs d'assignement : =, += ,-=


Remarque :


Les parenthses ayant une forte priorit, l'ordre d'interprtation


des oprateurs peut tre modifi par des parenthses.

Java - Dr A. Belangour

56

28

Les structures de contrles


 Java propose un ensemble d'instructions qui permettent
de d'organiser et de structurer les traitements.
 Ils sont appels structures de contrle et sont :
1. Les boucles
2. Les branchements conditionnels

 L'utilisation de ces structures de contrle est similaire


celle des autres langages de programmation.

Java - Dr A. Belangour

57

Les structures de contrles


 Les boucles
 Permettent de rpter un certain nombre
dinstructions un certain nombre de fois ou jusqu ce
quune condition sois ralise.
 Ces boucles sont :
 while ( boolean ) { ... }
 do { } while ( boolean )
 for (initialisation; condition; incrmentation) {}

Java - Dr A. Belangour

58

29

Les structures de contrles


 Boucle WHILE:

 Boucle DO..WHILE:
do {
...
} while ( condition)

while ( condition) {
...
}

 Similitudes : Dans les deux boucles le code est


excut tant que la condition est vraie. Lorsque la
condition passe faux le bloc du While est saut.
 Diffrence : Dans doWhile, la boucle est au
moins excute une fois quelque soit la valeur de la
condition;
Java - Dr A. Belangour

59

Les structures de contrles


 Boucle FOR :

for ( initialisation; condition; modification) {


...
}

Exemple :
for (int i =0; i<10; i++) {
System.out.println("bonjour");
}

Le nombre ditrations dans cette boucle est connu


lavance.

Lindex peut tre exploit dans les instructions de la boucle


for (int i =0; i<10; i++) {
System.out.println(" le double de"+i+ "est :"+i*i);
}

Java - Dr A. Belangour

60

30

Les structures de contrles


 Remarques :
 L'initialisation, la condition et la modification de
l'index sont optionnels.
Exemple : for ( ; ; ) { ... } // boucle infinie
 Il est possible d'inclure plusieurs traitements dans
l'initialisation et la modification de la boucle :
Exemple :
for (i = 0 , j = 0 ; i * j < 1000;i++ , j+= 2) { ....}

Java - Dr A. Belangour

61

Les structures de contrles


 La condition peut ne pas porter sur l'index de la
boucle :
Exemple :
boolean trouve = false;
for (int i = 0 ; !trouve ; i++ ) {
if ( tableau[i] == 1 )
trouve = true;
... //gestion de la fin du parcours du tableau
}

Java - Dr A. Belangour

62

31

Les structures de contrles


 Les branchements conditionnels :
 Permettent deffectuer des tests.
 Se composent :
 Du mot cl if
 De loprateur ternaire
 Du mot cl switch

Java - Dr A. Belangour

63

Les structures de contrles


 Tests avec IF :

 Loprateur ternaire:
 Forme :

 Forme :
if (boolean) { ... }
else if (boolean) { ... }
else { ... }

 Exemple :
if (moyenne>10)
passe= true
else
passe = false




( condition ) ? valeur-vrai
: valeur-faux

Facilit dcriture pour un


if avec un else.
Exemple :


Java - Dr A. Belangour

passe= (moyenne>10) ?
true : false;

64

32

Les structures de contrles


 Tests avec Switch :


Switch permet deffectuer des tests pour des valeurs


constantes de type primitif (byte, short, int, char).

Forme :
switch (expression)
{ case constante1 : instr11; instr12; break;
case constante2 : ...
default : ...
}

En labsence du break, lexcution passe au case suivant.

Il est possible d'imbriquer des switch

Java - Dr A. Belangour

65

Les structures de contrles


 Exemple :
class SwitchDemo {
public static void main(String[] args) {
int mois= 11;
switch (mois) {
case 1: System.out.println("Janvier"); break;
case 2: System.out.println("Fvrier"); break;

case 11: System.out.println("Novembre"); break;


case 12: System.out.println("Dcembre"); break;
default: System.out.println("Mois Invalide ");break;
}
}
}
Java - Dr A. Belangour

66

33

Les tableaux
 Les tableaux sont des structures de donnes regroupant
plusieurs valeurs de mme type.
 Cest en ensemble de valeurs qui sont pose lune ct
de lautre.
 On peut accder nimporte quelle valeur partir de son
rang ou indice.
 Ces valeurs peuvent tre des primitives ou des objets de
mme type.

Java - Dr A. Belangour

67

Les tableaux
 Exemple:


Supposons que nous voulons enregistrer les 3 notes dun


tudiant.

Au lieu davoir par exemple trois variables note1, note2,


note3 de type double, on peut dclarer un tableau les
contenant :

double[] notes =new double[3]

Ainsi :


Notes[0] reprsente la premire note

Notes[1] reprsente la deuxime note

Notes[2] reprsente la troisime note

Java - Dr A. Belangour

68

34

Les tableaux
 la dclaration prcdente peut tre indiffremment
dclare avec dautres faons comme suit :


double[] notes =new double[3]

double notes [] =new double[3]

 La dclaration peut tre dcale de lallocation comme


suit :


double[] notes ;//dclaration

notes =new double[3]; //allocation

 Laffectation peut venir aprs

Java - Dr A. Belangour

69

Les tableaux
 Remarques :
 Une fois fixe, la taille dun tableau ne peut changer.
 Une alternative dynamique ce type de tableaux est
reprsente par les vecteurs (classe Vector,
ArrayList,etc).
 Ces vecteurs peuvent tre rallous dynamiquement
et possdent la capacit de contenir des collections
d'objets divers.

Java - Dr A. Belangour

70

35

Les tableaux
 Les tableaux plusieurs dimensions sont dclars
comme tant un tableau de tableaux.


Exemple : float tableau[][] = new float[10][10];

 La taille des tableaux de la seconde dimension peut ne


pas tre identique pour chaque occurrence.


Exemple :


int dim1[][] = new int[3][];

dim1[0] = new int[4];

dim1[1] = new int[9];

dim1[2] = new int[2];

Java - Dr A. Belangour

71

Les tableaux
 Chaque lment du tableau est initialis selon son type
par l'instruction new :
 0 pour les numriques,
 '\0' pour les caractres,
 false pour les boolens et
 null pour les chanes de caractres et les autres objets.

 L'initialisation explicite d'un tableau. Exemple :


 int tableau[5] = {10,20,30,40,50};
 int tableau[3][2] = {{5,1},{6,2},{7,3}};

Java - Dr A. Belangour

72

36

Les tableaux
 Remarques :


La taille du tableau n'est pas obligatoire si le tableau est


initialis sa cration.


Exemple : int tableau[] = {10,20,30,40,50};

Le nombre d'lment de chaque lignes peut ne pas tre


identique :


Exemple :int[][] tabEntiers = {{1,2,3,4,5,6}, {1,2,3,4},


{1,2,3,4,5,6,7,8,9}};

Java - Dr A. Belangour

73

Les tableaux
 Le parcours d'un tableau
 le nombre d'lments dun tableau peut tre connu
grce la proprit length.
 Exemple:
for (int i = 0; i < t.length ; i ++) {
System.out.println( "lment numro "+ i +" est : "+t[i]);

 Un accs un lment d'un tableau qui dpasse sa


capacit, lve une exception du type
java.lang.arrayIndexOutOfBoundsException.

Java - Dr A. Belangour

74

37

Les tableaux
 Une mthode peut avoir un paramtre de type tableau


Exemple de dclaration : public void afficher(int[] t){ ... }

 Elle peut aussi retourner un tableau :




Exemple de dclaration : public int[] calculer(){ ... }

 Remarques :


Les tableaux sont toujours transmis par rfrence puisque


se sont des objets.

Java - Dr A. Belangour

75

Les conversions de types


 On peut avoir besoin de convertir une variable dun
type vers un autre type.

Java - Dr A. Belangour

76

38

Les conversions de types


 Les conversions vers un type dont la
taille de la reprsentation est plus
grande se font sans perte
dinformation, et sans besoin dtre
spcifi.
 Cependant : Les autres conversions
vers un type dont la taille de la
reprsentation est plus petite peuvent
entraner une perte dinformation, et
doivent tre spcifies par un
oprateur de cast.
 Ce sont les conversions de :
Java - Dr A. Belangour

77

Les conversions de types





Lors de la dclaration, il est possible d'utiliser un cast :


Exemple:







int entier = 5;
float flottant = (float) entier;

La conversion peut entraner une perte d'informations.


Il n'existe pas en Java de fonction pour convertir : les
conversions de type se font par des mthodes.
La bibliothque de classes API fournit une srie de classes
qui contiennent des mthodes de manipulation et de
conversion de types lmentaires :






String : pour les chaines de caractres Unicode


Integer : pour les valeurs entires (integer)
Long : pour les entiers long signs (long)
Float : pour les nombres virgules flottante (float)
Double : pour les nombres virgule flottante en double
prcision (double)

Java - Dr A. Belangour

78

39

Les conversions de types


 Ces classes portent le mme nom que le
type lmentaire sur lequel elles reposent
avec la premire lettre en majuscule.
 Elles contiennent gnralement plusieurs
constructeurs.
 Pour y accder, il faut les instancier
puisque ce sont des objets.
 Exemple :
 String montexte;
 montexte = new String("test");
 // L'objet montexte permet d'accder aux
mthodes de la classe java.lang.String

Java - Dr A. Belangour

79

Les conversions de types


 La conversion d'un entier int en
chane de caractre String:
 Exemple :
 int i = 10;
 String montexte = new String();
 montexte =montexte.valueOf(i);

 Remarque :
 valueOf est galement dfinie pour des
arguments de type boolean, long, float,
double et char

Java - Dr A. Belangour

80

40

Les conversions de types


 La conversion d'une chane de caractres
String en entier int
 Exemple :
 String montexte = new String("10");
 Integer nomnombre = new Integer(montexte);
 int i = monnombre.intValue();
 //conversion d'Integer en int

 La conversion d'un entier int en entier long


 Exemple:
 int i=10;
 Integer monnombre=new Integer(i);
 long j=monnombre.longValue();

Java - Dr A. Belangour

81

Les conversions de types


 Pour convertir une chaine de caractre en
entier:
 Utiliser la mthode parseInt() de la classe Integer
 Exemple :
 String ch="10";
 int x=integer.parseInt(ch)

 Pour convertir une chaine de caractre en


double:
 Utiliser la mthode parseDouble() de la classe Double
 Exemple :
 String ch="10";
 double x=Double.parseDouble(ch)

Java - Dr A. Belangour

82

41

Les conversions de types


 Pour convertir une chaine de caractre en
entier:
 Utiliser la mthode parseFloat() de la classe Float
 Exemple :
 String ch="10";
 float x=Float.parseFloat(ch)

 Remarque :
 Une telle instruction doit etre obligatoirement tre
mise dans un bloc try/catch
 Exemple :
try {x=integer.parseFloat(ch);}
catch (Exception e) {
System.out.println("erreur :" + e.getMassage());
}
Java - Dr A. Belangour

83

Les chanes de caractres


 Les chanes de caractres permettent de stocker
n'importe quelle squence de caractres
alphanumriques.
 La dfinition d'un caractre :
 char touche = '%';

 La dfinition d'une chane :


 String texte = "bonjour";

 Les variables de type String sont des objets.


 Partout ou des constantes chanes figurent entre
guillemets, le compilateur Java gnre un objet de
type String avec le contenu spcifi.
 Il est donc possible d'crire par exemple:
 String texte = "Java Java Java".replace('a','o');

Java - Dr A. Belangour

84

42

Les chanes de caractres




Les chanes ne sont pas des tableaux :







il faut utiliser les mthodes de la classes String d'un objet


instanci pour effectuer des manipulations.

Il est impossible de modifier le contenu d'un objet String


construit partir d'une constante.
Cependant, il est possible d'utiliser les mthodes qui
renvoient une chane pour modifier le contenu de la chane


Exemple :



String texte = "Java Java Java";


texte = texte.replace('a','o');

Remarques:





Java ne fonctionne pas avec le jeu de caractres ASCII ou


ANSI, mais avec Unicode (Universal Code).
Ceci concerne les types char et les chaines de caractres.
Le jeu de caractres Unicode code un caractre sur 2 octets.
Les caractres 0 255 correspondent exactement au jeu de
caractres ASCII

Java - Dr A. Belangour

85

Les chanes de caractres


 Les caractres spciaux dans les chanes:












Apostrophe : \'
Guillemet : \"
Anti-slash : \\
Tabulation : \t
retour arrire (backspace) : \b
retour chariot : \r
saut de page (form feed) : \f
saut de ligne (newline) : \n
caractre ASCII ddd (octal) : \0ddd
caractre ASCII dd (hexadcimal) : \xdd
caractre Unicode dddd (hexadcimal) : \udddd

Java - Dr A. Belangour

86

43

Les chanes de caractres


 L'addition de chanes
 Java admet l'oprateur + comme oprateur de
concatnation de chanes de caractres.
 L'oprateur + permet de concatner plusieurs
chanes.
 Il est possible d'utiliser l'oprateur +=
 Exemple:
 String texte = " ";
 texte += " Hello ";
 texte += " World3 ";

Java - Dr A. Belangour

87

Les chanes de caractres


 Loprateur + sert aussi concatner des
chanes avec tous les types de bases.
 La variable ou constante est alors convertie en
chane et ajoute la prcdente.
 La condition pralable est d'avoir au moins une
chane dans l'expression sinon le sinon '+' est
valu comme oprateur mathmatique.
 Exemple:
 System.out.println(" La valeur de Pi est :
"+Math.PI);
 int duree = 121;
 System.out.println(" dure = " +duree);

Java - Dr A. Belangour

88

44

Les chanes de caractres




Comparaison de deux chanes: mthode equals()




Exemple :




Dtermination de la longueur d'une chane: mthode


length()


Exemple :



String texte1 = "texte 1 ";


String texte2 = "texte 2 ";
if ( texte1.equals(texte2) )...

String texte = "texte";


int longueur = texte.length();

Modification de la casse d'une chane:






tout en majuscule :toUpperCase()


tout en minuscule : toLowerCase()
Exemple:



String texte = "texte";


String textemaj = texte.toUpperCase();

Java - Dr A. Belangour

89

La lecture partir du clavier


 Depuis larrive de la version 5.0, SUN a
implment une classe permettant de
rcuprer une valeur saisie au clavier.
 Dornavant, plus besoin de se dvelopper une
classe soi-mme pour faire cette tche.
 Cette classe sappelle Scanner
 Elle appartient au package java.util

Java - Dr A. Belangour

90

45

La classe Scanner
 Dclaration de lobjet :
 Scanner s = new Scanner(System.in);
 Quelques mthodes :
 next() : permet de lire une chaine de
caractres String
 nextInt() : permet de lire un int
 nextLong() : permet de lire un long
 nextDouble() : permet de lire un double
 nextFloat() : permet de lire un float

Java - Dr A. Belangour

91

La classe Scanner
 Exemple dutilisation :
import java.util.Scanner;
public class SaisieClavier{
public static void main(String [] args){
Scanner s = new Scanner(System.in);
System.out.println("Entrez votre nom :");
String nom = s.nextLine();
System.out.println("Bonjour " + nom);
}
}

Java - Dr A. Belangour

92

46

Exercices
 EX1 :
crire un programme qui calcule la moyenne de
notes fournies au clavier

 EX2:
 crivez un programme permettant de ranger les
noms des tudiants par ordre alphabtique
croissant.

 EX3 :
 crire un algorithme permettant de rechercher
puis corriger le nom dun tudiant figurant dans
un tableau de noms en utilisant la recherche par
dichotomie.

Java - Dr A. Belangour

93

Chapitre 3
POO en Java

47

Classe
 Une application est structure sous forme
dun ensemble de classes qui cooprent
pour effectuer une tche.
 Une classe est une collection
 Dattributs contenant des valeurs
 De mthodes dfinissant des traitements
 Les attributs et les mthodes sont nomms
membres de la classe:
 Les attributs sont les membres donnes
 Les oprations sont les membres fonctions

Java - Dr A. Belangour

95

Classe
 Exemple :
public class Personne {
// attributs
public String prenom;
public String nom;
// mthode (constructeur)
public Personne(){
prenom="Ali"; nom="Yacine";
}
// mthode
public void afficher(){
System.out.println(prenom+","+nom);
}
}
Java - Dr A. Belangour

96

48

Classe : Dclaration
 La syntaxe de dclaration d'une
classe est comme suit :
Modificateur class NomClasse [extends
ClasseMere] [implemenents Interfaces]
{
/* insrer ici les champs et les
mthodes */
}

Java - Dr A. Belangour

97

Classe : Dclaration
 Les modificateurs de classe sont :
 abstract :
 La classe contient ventuellement une ou des
mthodes abstraites, qui n'ont pas de dfinition
explicite.
 Une classe dclare abstract ne peut pas tre
instancie.
 final :
 La classe ne peut pas tre modifie, sa redfinition
grce l'hritage est interdite.
 Les classes dclares final ne peuvent donc pas avoir
de classes filles.
 private :
 La classe n'est accessible qu' partir du fichier o
elle est dfinie
 public :
 La classe est accessible partout
Java - Dr A. Belangour

98

49

Classe : Dclaration
 Le mot cl extends permet de prciser
ventuellement la classe mre dans une
relation d'hritage.
 Le mot cl implements permet de spcifier
une ou des interfaces que la classe
implmente.
 Remarque :
 Les modificateurs abstract et final ainsi que
public et private sont mutuellement exclusifs.
 L'ordre des mthodes dans une classe n'a pas
d'importance.

Java - Dr A. Belangour

99

Classe : Utilisation
 Pour pouvoir utiliser une classe il faut crer
un objet.
 Relation entre Objet et Classe :
 Une classe peut tre considre comme un
Plan partir duquel on cre une ou plusieurs
maisons qui sont des objets.

 Un objet est appel instance d'une classe


 Un objet est caractris par :
 Un tat (valeur pour des attributs) et
 Un ensemble doprations qui dcrivent son
comportement

Java - Dr A. Belangour

100

50

Classe : Utilisation
 Pour crer un objet, il faut :

1. Dclarer une variable qui va le contenir.


 Ex : Personne p;
2. Lui allouer de la mmoire en appelant son
constructeur.
 Ex : p= new Personne();

 Remarque :

Il est possible de tout runir en une seule


dclaration :
 Personne p =new Personne();
 Si l'oprateur new n'obtient pas l'allocation
mmoire ncessaire, il lve l'exception
OutOfMemoryError.


Java - Dr A. Belangour

101

Classe : Utilisation
 Exercice:
 crire une classe qui cre trois objets
p1,p2,p3 de type Personne.
 Modifier les noms et prnoms des objets
p2 et p3.
 Afficher ensuite leurs noms et prnoms.

Java - Dr A. Belangour

102

51

Classe : Utilisation
public class Test {
//mthode
public static void main (String args[]) {
Personne p1=new Personne();
p1. afficher();
Personne p2=new Personne();
p2.prenom="Hassan" ;
P2.nom="Omari" ;
p2. afficher();
p3.prenom="Samir";
}
}

Java - Dr A. Belangour

103

Constructeurs
 Un objet est toujours cr par le biais dune
mthode appele constructeur.
 Un constructeur est une mthode spciale
qui sert initialiser un objet lors de sa
cration.
 Il porte toujours le nom de la classe pour
laquelle il est dfinie.
 Il est public et nas pas de type de retour
 Une classe peut avoir un ou plusieurs
constructeurs.

Java - Dr A. Belangour

104

52

Constructeurs
 Il existe trois types de constructeurs :
 Par dfaut : pour la cration puis
linitialisation dun objet dans le cas ou le
programmeur omet de donner des
valeurs.
 Paramtr: pour la cration puis
linitialisation dun objet avec des valeurs
donnes par le programmeur .
 Par recopie: pour la cration puis
linitialisation dun objet en copiant les
valeurs dun autre objet.

Java - Dr A. Belangour

105

Constructeurs



La classe Personne de lexemple prcdent comporte un


constructeur par dfaut.
Ajoutons deux autres constructeurs
 paramtr :

public Personne(String Nm,String Pm){


nom=Nm; prenom=Pm;
}


Par recopie :

public Personne (Personne s){


this.prenom=s.prenom; this.nom=s.nom;
}


Remarque : this veut dire lobjet en cours de cration

Java - Dr A. Belangour

106

53

Destructeur
 La dure de vie d'un objet passe par
trois tapes :
1. la dclaration de l'objet et
l'instanciation grce l'oprateur new
2. L'utilisation de l'objet en appelant ses
mthodes
3. La suppression de l'objet

Java - Dr A. Belangour

107

Destructeur
Un destructeur est une mthode spciale qui
permet de librer la mmoire occupe par un
objet avant de le dtruire.
 En java, cette fonction est prise en charge
automatiquement par le garbage collector
 Cependant si nous devons effectuer un traitement
avant la destruction dun objet il faut redfinir la
mthode finalize() hrite de la classe Object.
 Remarque :
 il n'est pas possible de prvoir le moment ou un
objet sera trait par le garbage collector.
 si la machine virtuelle est brusquement arrte
par l'utilisateur, les finaliseurs de ces objets ne
seront pas appels.


Java - Dr A. Belangour

108

54

Les proprits ou attributs


 Les donnes d'une classe sont contenues
dans des variables nommes proprits ou
attributs.
 Il existe 3 modificateurs qui peuvent tre
utiliss pour dfinir la visibilit dun attribut
dans une classe:
 public : nimporte quel autre objet dune autre classe
peut lire et modifier cet attribut
 Protected : seules les mthodes de la classe en
question ou ses sous-classes ont le droit de modifier
cet attribut et aussi les classes du mme package.
 private : seules les mthodes de la classe en question
ont le droit de modifier cet attribut.

Java - Dr A. Belangour

109

Les proprits ou attributs


 Remarque 1:

 Il est possible dinitialiser un attribut en mme


temps quil est dclar.
 Exemple : public String nom="yacine";

 Remarque 2:

 Il est dconseill de dclarer les attributs


comme public.
 la place, utiliser des mthodes permettant de
les lire et/ou les modifier: les mthodes daccs
(accessor methods).
 Cest le fameux principe de lencapsulation.
 Les mthodes daccs ont la forme :
 getNomAttribut () : pour lire un attribut
 setNomAttribut () : pour le modifier
Java - Dr A. Belangour

110

55

Les proprits ou attributs


 Exercice :
 Reprendre la classe prcdente Personne
 Rendre ses attributs privs
 Ajouter des mthodes daccs pour
chacun de ses attributs.
 Faire un programme de test

Java - Dr A. Belangour

111

Les proprits ou attributs


 un attribut peut tre :
 Une constante
 Une variable d'instance,
 Ou une variable de classe

Java - Dr A. Belangour

112

56

Les proprits ou attributs


 Les attributs constantes :
 Les constantes sont dfinies avec le mot
cl final

 leur valeur ne peut pas tre modifie une


fois qu'elles sont initialises..

 Exemple :
 public class MaClasse {
 final double pi=3.14 ;
 }

Java - Dr A. Belangour

113

Les proprits ou attributs


 Les variables d'instances :
 Une variable d'instance ncessite simplement
une dclaration de la variable dans le corps de la
classe.
 Chaque instance de la classe a sa propre valeur
de la variable.
 Exemple :
 Dans la classe Personne, les attributs nom et
prenom sont des variables dinstances.
 Ainsi, dans un objet p1 lattribut nom, par
exemple, vaut Ahmed et dans un autre
objet p2 elle vaut Omar .

Java - Dr A. Belangour

114

57

Les proprits ou attributs


 Les variables de classes :
 Exercice :
 Dans un parc de voitures, chaque achat dune
voiture un objet de type de classe Voiture doit
tre cr.
 crire une classe voiture ayant :
 Un attribut marque de type String
 Un attribut Nbr de type int (reprsentant le nombre
de dobjets voiture cr)
 Un constructeur paramtr
 Une fonction qui affiche le nombre total de voitures

 crire un programme dessai

Java - Dr A. Belangour

115

Les proprits ou attributs


 La classe Voiture :
public class Voiture {
private String marque;
private int nbr=0;
public Voiture(String m) {
marque=m;
nbr++;
}
public void afficher()
{ System.out.println("la marque de la voiture est
"+marque);
System.out.println("le nombre de voitures est "+nbr);
}
}

Java - Dr A. Belangour

116

58

Les proprits ou attributs


 Le programme dessai
public class Essai {
public static void main(String[] args) {
Voiture v1= new Voiture("Laraki Fulgura");
v1.afficher();
Voiture v2= new Voiture("Laraki Borac");
v2.afficher();
Voiture v3= new Voiture("Ferrari");
v3.afficher();
}
}
Java - Dr A. Belangour

117

Les proprits ou attributs


 Le rsultat de lexcution :







la
le
la
le
la
le

marque
nombre
marque
nombre
marque
nombre

de
de
de
de
de
de

la voiture est Laraki Fulgura


voitures est 1
la voiture est Laraki Borac
voitures est 1
la voiture est Ferrari
voitures est 1

 Nous remarquons que le nombre de voitures


naugmente pas.
 problme : chaque objet Voiture a sa propre
version de lattribut nbr.
 Solution : lattribut nbr doit tre commun tous
les objets Voitures

Java - Dr A. Belangour

118

59

Les proprits ou attributs


 Lattribut nbr doit tre une variable de
classe et non dinstance.
 Les variables de classes sont dfinies
avec le mot cl static
 Chaque objet de la classe partage la
mme variable.
 La classe voiture devient :

Java - Dr A. Belangour

119

Les proprits ou attributs


 La classe Voiture modifie:
public class Voiture {
private String marque;
private static int nbr=0;
public Voiture(String m) {
marque=m;
nbr++;
}
public void afficher()
{ System.out.println("la marque de la voiture est
"+marque);
System.out.println("le nombre de voitures est "+nbr);
}
}

Java - Dr A. Belangour

120

60

Les mthodes : dclaration


 Les mthodes sont des fonctions qui implmentent les
traitements de la classe.
 La syntaxe de la dclaration d'une mthode est :
 modificateurs typeRetourn nomMthode ( arg1,..)
 {

// dfinition des variables locales et du bloc

//d'instructions
 }

 Le type retourn peut tre lmentaire ou


correspondre un objet.
 Si la mthode ne retourne rien, alors on utilise void.

Java - Dr A. Belangour

121

Les mthodes : arguments


 En Java les arguments dune mthode ne sont passs
que par valeur :
 la mthode fait une copie locale de la variable qui lui
est transmis.
 Lorsqu'un argument est un objet la mthode reoit sa
rfrence et en fait une copie locale.
 La mthode modifie ensuite lobjet grce ses
mthodes.
 Exemple :
void modifier(Personne p)
{ p.setNom("ayyoub");
}

 Remarque :
 Pour transmettre un argument par rfrence une
mthode, il faut lencapsuler dans un objet dot de
mthodes pour sa mise jour.

Java - Dr A. Belangour

122

61

Les mthodes : modificateurs


 Les modificateurs de mthodes sont :
 public :
 la mthode est accessible aux mthodes des
autres classes
 private :
 l'usage de la mthode est rserv aux
mthodes de la mme classe
 protected :
 la mthode ne peut tre invoque que par des
mthodes de la classe ou de ses sous classes
 final :
 la mthode ne peut tre modifie (redfinition
lors de l'hritage interdite)

Java - Dr A. Belangour

123

Les mthodes : modificateurs




static :
 la mthode appartient simultanment tous les objets
de la classe.
 Il est inutile d'instancier la classe pour appeler la
mthode mais la mthode ne peut pas manipuler de
variable d'instance.
 Elle ne peut utiliser que des variables de classes.

Exemple :
 Ajoutons la mthode suivante la classe voiture:
public static void afficherNbr()
{
System.out.println("le nbr de voiture ="+ Nbr)
}

 Pour appeler cette mthode il suffit dcrire :


Voiture.afficherNbr()

Java - Dr A. Belangour

124

62

Les mthodes : modificateurs


 abstract :
 Une mthode est abstraite lorsquon veut forcer sa
redfinition dans les classes filles qui vont lhriter.
 Une mthode abstraite na pas de corps
 Exemple : abstract void afficher();

 Sans modificateur :
 Utilisation rserve exclusivement aux classes du
mme package.

 Autres modificateurs
 synchronized :
la mthode fait partie d'un thread.
Lorsqu'elle est appele, elle barre l'accs son
instance jusqu la fin de son excution.
 native :
le code source de la mthode est crit dans un autre
langage.
Java - Dr A. Belangour

125

Les mthodes : valeur de retour


 La valeur de retour de la mthode doit tre transmise
par l'instruction return.
 toutes les instructions qui suivent return sont ignores.
 Exemple:




int add(int a, int b) {


return a + b;
}

 Remarque :


Il est possible d'inclure une instruction return dans une


mthode de type void : cela permet de quitter la mthode.

 Si la mthode retourne un tableau alors les [] peuvent


tre prciss aprs le type de retour ou aprs la liste des
paramtres.
 Exemple:



int[] valeurs() { ... }


int valeurs()[] { ... }

Java - Dr A. Belangour

126

63

Les mthodes : main


 La mthode main() de la classe principale d'une
application doit tre dclare de la faon suivante :
 public static void main (String args[]) { ... }
 Exemple :
 public class MonApp1 {

public static void main(String[] args) {

System.out.println("Bonjour");

}
 }

 Cette dclaration de la mthode main() est impose


par la machine virtuelle pour reconnatre le point
d'entre d'une application.
 Si la dclaration de la mthode main() diffre, une
exception sera leve lors de la tentative d'excution
par la machine virtuelle.

Java - Dr A. Belangour

127

Les mthodes : main


 Exemple:
public class MonApp2 {
public static int main(String[] args) {
System.out.println("Bonjour");
return 0;
}
}

 Rsultat:
 C:\>javac MonApp2.java
 C:\>java MonApp2 Exception in thread "main"
java.lang.NoSuchMethodError: main

Java - Dr A. Belangour

128

64

Les mthodes : main


 Args est un tableau pour recueillir
dventuels paramtres quand le
programme est excut en mode
ligne de commande.
 Exercice :
 Faire un programme qui calcule la
moyenne de notes fournies en ligne de
commande.

Java - Dr A. Belangour

129

Les mthodes : main


 Solution :
public class testMain{
public static void main(String[] args) {
double somme=0,moyenne,note;
try{
for (int i=0;i<args.length;i++){
note=Double.parseDouble(args[i]);
somme=somme+note;
}
moyenne=somme/args.length;
System.out.println("la moyenne est : "+moyenne);
}
catch(Exception e){
System.out.println("Erreur : "+e.getMessage());
}
}
}

Java - Dr A. Belangour

130

65

Les mthodes : main


 Remarque:
 Pour excuter cet exemple , il faut se
mettre en mode commande (ms dos)
 Et taper par exemple :
 java testMain 10 12 11

 Le rsulat sera affich sous dos aussi


comme suit :
 la moyenne est : 11.0

Java - Dr A. Belangour

131

Les mthodes
 L'mission de messages :
 Un message est mis lorsqu'on demande un objet
d'excuter l'une de ses mthodes.
 La syntaxe d'appel d'une mthode est :
 nomObjet.nomMthode(parametre, ... ) ;
 Si la mthode appele ne contient aucun paramtre,
il faut laisser les parenthses vides.

Java - Dr A. Belangour

132

66

Les mthodes
 L'enchanement de rfrences des variables et
des mthodes
 Exemple:
 System.out.Println("bonjour");
 Deux classes sont impliques dans l'instruction :
 System et PrintStream.
 La classe System possde une variable nomme out
qui est un objet de type PrintStream. Println() est
une mthode de la classe PrintStream.
 L'instruction signifie :
 utilise la mthode Println() de la variable out de la
classe System

Java - Dr A. Belangour

133

Les mthodes : surcharge


 Lorsque dans une classe, plusieurs mthodes portent :
 Le mme nom
 Le mme type de retour
 Des arguments diffrents
 On dit que la mthode est surcharge
 Exemple:
class affiche{
public void afficheValeur(int i) {
System.out.println(" nombre entier =" + i);
}
public void afficheValeur(float f) {
System.out.println(" nombre flottant = " + f);
}
}

 Le compilateur choisi la mthode qui doit tre appele


en fonction du nombre et du type des arguments.
Java - Dr A. Belangour

134

67

Les mthodes : surcharge


 Remarque :



Il n'est pas possible d'avoir deux mthodes qui ont deux


signatures identiques.
La signature d'une mthode comprend, le nom de la
mthode , les types des paramtres et le type de retour.

 Exemple:
class Affiche{
public float convertir (int i){
return((float) i);
}
public double convertir (int i){
return((double) i);
}
}

Java - Dr A. Belangour

135

Les mthodes : surcharge


 Rsultat la compilation :






C:\>javac Affiche.java
Affiche.java:5: Methods can't be redefined with a different
return type: double
convert(int) was float convert(int)
public double convert(int i){
^ 1 error

Java - Dr A. Belangour

136

68

Objets : rfrence
 Chaque instance d'une classe ncessite sa
propre variable.
 Plusieurs variables peuvent dsigner un
mme objet.
 Soit les instructions :
 Personne p1= new Personne("Ali","Alaoui");
 Personne p2;
 p2=p1;

 Linstruction p2=p1 :
 Ne dfinit pas un nouvel objet
 Elle copie la rfrence de l'objet p2 dans p1
Java - Dr A. Belangour

137

Objets : clonage
 Dans lexemple prcdent p1 et p2 pointent sur le
mme objet : les modifications faites partir d'une
des variables modifient l'objet.
 Pour crer une copie indpendante partir de p1, il
faut utiliser la mthode clone() :
 Exemple :


Personne p1= new Personne("Ali","Alaoui");

Personne p2;

p2=p1.clone();

 p1 et p2 ne contiennent plus la mme rfrence et


pointent donc sur des objets diffrents.
Java - Dr A. Belangour

138

69

Objets : comparaison
 Remarque :
 Deux objets avec des proprits identiques sont
deux objets distincts.

 Pour comparer l'galit des variables de deux


instances, il faut redfinir la mthode equals()
hrite de Object.
 La mthode getClass() de Object permet de
savoir si deux objets sont de la mme classe
 Exemple:
 (obj1.getClass().equals(obj2.getClass())

Java - Dr A. Belangour

139

Objets : oprateur instanceof


 L'oprateur instanceof permet de dterminer
la classe de l'objet qui lui est pass en
paramtre.
 La syntaxe est : objet instanceof classe
 Exemple:
void testClasse(Object o) {
if (o instanceof MaClasse )
System.out.println("o est instance de MaClasse ");
else
System.out.println(" o nest pas instance de MaClasse ");
}

Java - Dr A. Belangour

140

70

Objets : oprateur instanceof


 Il n'est toutefois pas possible d'appeler une
mthode de l'objet car il est pass en
paramtre avec un type Object
 Exemple:
void afficheChaine(Object o) {
if (o instanceof MaClasse)
System.out.println(o.getChaine());
// erreur la compil car la mthode getChaine()
//n'est pas dfinie dans la classe Object
}

Java - Dr A. Belangour

141

Objets : oprateur instanceof


 Pour rsoudre le problme, il faut utiliser la
technique du casting (conversion).
 Exemple:
void afficheChaine(Object o) {
if (o instanceof MaClasse) {
MaClasse m = (MaClasse) o;
System.out.println(m.getChaine());
// OU
System.out.println( ((MaClasse) o).getChaine() );
}
}

Java - Dr A. Belangour

142

71

Le mot cl abstract
 Le mot cl abstract s'applique aux mthodes
et aux classes.
 Abstract indique que la classe ne pourra tre
instancie telle quelle.
 Ses mthodes devront tre redfinies par des
mthodes compltes dans ses sous-classes.
 Les classes drives profitent des mthodes
hrites et n'auront implmenter que les
mthodes dclares abstract.
Java - Dr A. Belangour

143

Le mot cl abstract


Exemple:
abstract class ClasseAbstraite {
// constructeur
ClasseAbstraite() {.}
//mthode dont le code est partag par tous les descendants
void mthode() { }
//mthode abstraite
abstract void mthodeAbstraite();
}
class ClasseComplete extends ClasseAbstraite {
// constructeur
ClasseComplete() { super(); ... }
//mthode redfinissant la mthode abstraite hrite
void mthodeAbstraite() { }
}

Java - Dr A. Belangour

144

72

Le mot cl abstract
 Une mthode abstraite est une mthode dclare
avec le modificateur abstract et sans corps.

forcer sont implmentation dans une sous classe.

 L'abstraction permet une validation du codage


 Exemple :
 une sous classe sans le modificateur abstract et sans
dfinition explicite d'une ou des mthodes abstraites
gnre une erreur de compilation.

 Une classe est automatiquement abstraite ds qu'une


de ses mthodes est dclare abstraite.
 Remarque :
 Il est possible de dfinir une classe abstraite sans
mthodes abstraites.
Java - Dr A. Belangour

145

L'hritage
 L'hritage est un mcanisme qui facilite la
rutilisation du code et la gestion de son
volution.
 Il dfinit une relation entre deux classes :
1. une classe mre ou super-classe
2. une classe fille ou sous-classe qui hrite
de sa classe mre
 Grce l'hritage, les objets d'une classe fille
ont accs aux donnes et aux mthodes de
la classe parent et peuvent les tendre.

Java - Dr A. Belangour

146

73

L'hritage
 Mise en oeuvre de l'hritage :
 On utilise le mot cl extends pour indiquer
qu'une classe hrite d'une autre.
 En l'absence de ce mot rserv associ une
classe, le compilateur considre la classe Object
comme classe parent.
 Exemple :
 class Fille extends Mere { ... }
 Pour invoquer une mthode d'une classe parent,
il suffit de la prfixer par super.
 Pour appeler le constructeur de la classe parent
il suffit d'crire super(paramtres) avec les
paramtres adquats.
Java - Dr A. Belangour

147

L'hritage
 Exemple :
public class Personne {
private String prenom;
private String nom;
public Personne(String Nm,String Pm){
nom=Nm; prenom=Pm;
}
public void afficher(){
System.out.println("prenom= "+prenom+" nom=
" +nom);
}
}

Java - Dr A. Belangour

148

74

L'hritage
public class Etudiant extends Personne{
private String CNE;
public Etudiant (String Nm,String Pm, String code){
super(Nm,Pm); CNE=code;
}
public void afficherTout(){
super.afficher();
System.out.println("CNE = "+CNE);
}
}
public class Test{
public static void main(String[] args) {
Etudiant e=new Etudiant("Alaoui","Omar","2008/201");
e.afficherTout();
}
}
Java - Dr A. Belangour

149

L'hritage
 Les sous-classes peuvent redfinir les variables
et les mthodes hrites.
 Pour les variables, il suffit de les redclarer sous
le mme nom avec un type diffrent.
 Les mthodes sont redfinies avec la mme
signature, sinon cest une surcharge.

 Une classe peut avoir plusieurs sous-classes.


 Il n'y a pas d'hritage multiple en Java.
 Object est la classe parente de toutes les
classes en Java.
Java - Dr A. Belangour

150

75

L'hritage
 Redfinition d'une mthode hrite:
 La redfinition d'une mthode hrite doit
imprativement conserver la dclaration de la
mthode parent
 Si la signature de la mthode change, ce n'est
plus une redfinition mais une surcharge.
 Cette nouvelle mthode n'est pas hrite : la
classe mre ne possde pas de mthode
possdant cette signature.

Java - Dr A. Belangour

151

L'hritage
 Le polymorphisme :
soit lexemple suivant:
class Humain{
public void parler(){
System.out.println("Je
parle");
}
}
class Arabe extends Humain{
public void parler(){
System.out.println("Je
parle arabe");
}
}

Polymorphisme

class Test {
public static void main (String[]
args) {
Humain h=new Humain();
Arabe a=new Arabe();
h=a;
Lgal car Arabe
est une soush.parler();
classe de umain
}
Quelle mthode
}
sera excute ?

Rponse : la mthode parler() de


la classe Arabe car la machine
virtuelle dtecte lexcution le
type de lobjet assign la variable
de la classe de base

Java - Dr A. Belangour

152

76

L'hritage
 Remarques :
 on peut affecter une rfrence d'une classe
n'importe quel objet d'une de ses sous classes.
 En particulier on peut affecter nimporte quelle
instance de classe une instance de type Object.
 Il est possible d'crire le code suivant si Etudiant hrite
de Personne:
 Personne[] tab = new Personne[10];
 tab[0] = new Personne( "Zayd","Ali");
 tab[1] = new Etudiant("Amr", "Hassan", "2008/201");

Java - Dr A. Belangour

153

Classes abstraites
 Supposons que nous avons les deux classes suivantes :
class Enseignant{
String nom;
String prenom;
String numSomme;

class Etudiant{
String nom;
String prenom;
String CNE;

 Nous remarquons que les deux classes ont des champs


communs.
 Pour factoriser nous crons une classe Personne qui
contiendra ces champs communs et dont hriteront les
deux classes Enseignant et Etudiant.

Java - Dr A. Belangour

154

77

Classes abstraites
 Le code des trois classes devient :
class Personne{
class Enseignant
extends
String nom;
Personne{
String prenom;
String
numSomme;

}
}

class Etudiant extends


Personne {
String CNE;

 Le but de la classe Personne est juste de faire une


gnralisation: Il faut interdire son instanciation
 Donc : on la dclare avec le mot cl abstract
abstract class Personne{
String nom;
String prenom;

}
Java - Dr A. Belangour

155

Classes abstraites
 Ds quun mthode au sein dune classe est
abstraite, cette classe doit
automatiquement tre dclare abstraite.
 Exercice :
 Reprendre lexemple de la classe Humain et
Arabe.
 Transformer la classe Humain en classe
abstraite
 Dclarer la fonction parler en mthode abstraite.
 la redfinir dans la classe Arabe.
 Faire un programme dessai.

Java - Dr A. Belangour

156

78

Les interfaces
 L'hritage multiple, n'existe pas en Java.
 Pour le simuler on utilise les interfaces.
 Une interface est un ensemble de
constantes et de dclarations de mthodes
correspondant un peu une classe abstraite.
 C'est une sorte de standard auquel une classe
peut rpondre.
 Une classe implmente une interface lorsquelle
fournit une dfinition pour ces mthodes.
Java - Dr A. Belangour

157

Les interfaces
 Plusieurs interfaces peuvent tre implmentes
dans une mme classe.
 Les interfaces se dclarent avec le mot cl
interface et sont intgres aux autres classes
avec le mot cl implements.
 Une interface est implicitement dclare avec
le modificateur abstract.

Java - Dr A. Belangour

158

79

Les interfaces
 Dclaration d'une interface :
[public] interface nomInterface [extends nomInterface1,
nomInterface2 ... ] {
// insrer ici des mthodes ou des champs static
}

 Implmentation d'une interface :


Modificateurs class nomClasse [extends superClasse]
[implements nomInterface1, nomInterface 2, ...] {
//insrer ici des mthodes et des champs
}

Java - Dr A. Belangour

159

Les interfaces
 Exemple :
interface AffichageType {
void afficher();
}
class Personne implements AffichageType{
public void afficher() {
System.out.println(" Je suis une personne ");
}
}
class Voiture implements AffichageType{
public void afficher() {
System.out.println(" Je suis une voiture ");
}
}
Java - Dr A. Belangour

160

80

Les interfaces
class Test {
public static void main (String[] args) {
AffichageType f;
f=new Personne();
f.afficher();
f=new Voiture();
f.afficher();
}
}

Java - Dr A. Belangour

161

Les interfaces
 Remarque :
 Toutes les mthodes d'une interface sont
abstraites : elles sont implicitement dclares
comme telles.

Java - Dr A. Belangour

162

81

Les interfaces
 Une interface peut tre d'accs :
 public : toutes ses mthodes sont implicitement
publiques mme si elles ne sont pas dclares avec le
modificateur public.
 Package (sans modificateur) : il s'agit d'une interface
d'implmentation pour les autres classes du package
et ses mthodes ont le mme accs package : elles
sont accessibles toutes les classes du packages.

 Les seules variables que l'on peut dfinir dans une


interface sont des variables de classe qui doivent tre
constantes :
 elles sont donc implicitement dclares avec le
modificateur static et final mme si elles sont dfinies
avec d'autres modificateurs.
Java - Dr A. Belangour

163

Les interfaces
 Exemple :

public interface MonInterface {


public int VALEUR=0;
void maMethode();
}

 Toute classe qui implmente cette interface doit au


moins possder les mthodes qui sont dclares dans
l'interface.
 L'interface ne fait que donner une liste de mthodes
qui seront dfinir dans les classes qui implmentent
l'interface.
 Les mthodes dclares dans une interface publique
sont implicitement publiques et elles sont hrites par
toutes les classes qui implmentent cette interface.
Java - Dr A. Belangour

164

82

Les interfaces
 Une classe peut implmenter une ou plusieurs
interfaces tout en hritant de sa classe mre.
 L'implmentation d'une interface est une forme
d'hritage.
 Comme pour l'hritage d'une classe, l'hritage d'une
classe qui implmente une interface dfinit un cast
implicite de la classe fille vers cette interface.
 Il est important de noter que dans ce cas il n'est
possible de faire des appels qu' des mthodes de
l'interface.
 Pour utiliser des mthodes de l'objet, il faut dfinir un
cast explicite :

il est prfrable de contrler la classe de l'objet pour


viter une exception ClassCastException l'excution
Java - Dr A. Belangour

165

Les interfaces
 Exercice :
 Reprendre lexemple de la personne, lenseignant et
ltudiant.
 Ajouter une interface Affichage contenant une
mthode afficher().
 Les classes Etudiant et Enseignant devront
implmenter linterface Affichage en plus de
lextension de la classe Personne.
 La classe Personne est abstraite et contient en plus
des champs nom et prenom, un constructeur
paramtr et une mthode abstraite travailler().
 crire un programme de test.

Java - Dr A. Belangour

166

83

Les interfaces
 Solution :
Personne.java

Affichage.java

public abstract class Personne {


private String prenom;
private String nom;
public Personne(String p,String n){
prenom=p;
nom=n;
}
public abstract void travailler();

public interface Affichage{


public void afficher();
}

Java - Dr A. Belangour

167

Les interfaces
Enseignant.java
public class Enseignant extends Personne implements Affichage{
private String numSomme;
public Enseignant(String p,String n ,String d){
super(p,n);
numSomme=d;
}
public void travailler(){
System.out.println("travailler pour moi c est enseigner");
}
public void afficher(){
System.out.println("Mon DOTI est:"+numSomme);
}
}

Java - Dr A. Belangour

168

84

Les interfaces
Etudiant.java
public class Etudiant extends Personne implements Affichage{
private String CNE;
public Etudiant(String p,String n ,String c){
super(p,n);
CNE=c;
}
public void travailler(){
System.out.println("travailler pour moi cest tudier");
}
public void afficher(){
System.out.println("Mon CNE est:"+CNE);
}
}

Java - Dr A. Belangour

169

Les interfaces
Test.java
public class Test{
public static void main(String[] args){
Etudiant etu=new Etudiant("Hamza","Ali","2008/201");
Enseignant ens=new Enseignant("Hakim", "Omar","65744");
etu.afficher();
etu.travailler();
ens.afficher();
ens.travailler();
}
}

Java - Dr A. Belangour

170

85

Des conseils sur l'hritage


 Lors de la cration d'une classe mre il faut
tenir compte des points suivants :
 la dfinition des accs aux variables d'instances,
trs souvent prives, doit tre rflchie entre
protected et private
 pour empcher la redfinition d'une mthode
(surcharge) il faut la dclarer avec le
modificateur final

Java - Dr A. Belangour

171

Des conseils sur l'hritage


 Pour chaque mthode hrite non final, il faut
envisager les cas suivants :
1. la mthode hrite convient la classe fille : on ne
doit pas la redfinir
2. la mthode hrite convient mais partiellement du
fait de la spcialisation apporte par la classe fille : il
faut la redfinir voir la surcharger.
 La plupart du temps une redfinition commencera
par appeler la mthode hrite (via super) pour
garantir l 'volution du code

3. la mthode hrite ne convient pas : il faut redfinir


ou surcharger la mthode sans appeler la mthode
hrite lors de la redfinition.
Java - Dr A. Belangour

172

86

Les packages : Dclaration


 Pour regrouper des classes qui couvrent un mme
domaine on utilise la notion du package.
 Lutilisation de packages permet de simplifier la
maintenabilit et lvolutivit dune application.
 Pour raliser un package :
1. On cre un rpertoire qui porte le mme nom que le
package souhait.
2. On rassemble tous les fichiers de classes java dans ce
rpertoire.
3. On commence chacun de ces fichiers java par linstruction :
package nomPackage;

 Attention :



le nom du package doit tre identique au nom du


rpertoire.
Une classe doit tre dclare avec le modificateur public
pour tre visible en dehors de son package de base.
Java - Dr A. Belangour

173

Les packages : Exemple


 Exemple :
Package Humains.Amis;
public class Personne {
public String prenom;
public String nom;
public Personne(){ prenom="Ali"; nom="Yacine"; }
public void afficher(){
System.out.println(prenom+","+nom); }
}

 Remarque :




La classe Personne figure dans le sous-rpertoire Amis du


rpertoire Humains.
Les IDE tel que Jcreator et Netbeans, Eclipse, vous
aident crer les rpertoires en les dduisant des noms
des packages.
Sous DOS, il faut taper java d suivi du nom du
rpertoire ou les fichiers classes devront aller puis vos
fichiers java. Exemple : java d dossierDest *.java
Java - Dr A. Belangour

174

87

Les packages : Utilisation


 Pour utiliser les classes dun package, il y a 2
mthodes :
 On importe toutes les classes du package grce
linstruction, par exemple :
 import monpackage.*;

 On importe juste les classes qui nous intressent, par


exemple :
 import monpackage.classe1;
 import monpackage.classe2;

 Pour lexemple prcdent on crira:

 import Humains.Amis.*; //tout le package ou


 import Humains.Amis.Personne;//juste la classe
Personne

Attention :




L'astrisque n'importe pas les sous-packages.


Par exemple, il n'est pas possible d'crire import
Humains.*;
Java - Dr A. Belangour

175

Les packages : types


 Il existe plusieurs types de packages :
 le package par dfaut : Reprsente le rpertoire
courant et permet de localiser les classes qui ne sont
pas associes un package particulier.
 Les packages standards : Les packages
reprsentant la bibliothque java.
 Les packages personnels : Crs par les
utilisateurs.

 Remarque :
 Le package java.lang est import implicitement par
le compilateur : import java.lang.*;

 Ce package contient les classes de base comme la


classe Object et les types de donnes.

Java - Dr A. Belangour

176

88

Les packages : Qualification


 Collision de classes
 Lorsque deux classes portent le mme nom dans un
programme, on dit quil y a collision de classes.
 Dans ce cas, il faut qualifier explicitement le nom de
la classe avec le nom complet du package.

 Pour utiliser un package il faut quil figure dans


le dossier de votre projet.
 Sinon il faut renseigner la variable
denvironnement CLASSPATH sur son
emplacement.
 Remarque :
 Le compilateur peut lire les fichiers .class quils
soient indpendants ou compresss dans un mme
fichier (fichiers jar).

Java - Dr A. Belangour

177

Les packages : Exercice


 Reprendre lexercice prcdent:
 Mettre Personne et Affichage dans un
package nomm a .
 Mettre Enseignant et Etudiant dans un
package nomm b .
 Laisser Test sans package.

 Attention :
 Noubliez pas dimporter les diffrents packages
utiliss
Java - Dr A. Belangour

178

89

Les packages : solution


 Commande de compilation: javac d . *.java
Affichage.java

Personne.java
package a;
public abstract class Personne {
private String prenom;
private String nom;
public Personne(String p,String n){
prenom=p;
nom=n;
}
public abstract void travailler();

package a;
public interface Affichage{
public void afficher();
}

Java - Dr A. Belangour

179

Les packages : solution


package b;
import a.Personne;
import a.Affichage;
public class Enseignant extends Personne implements Affichage{
private String numSomme;
public Enseignant(String p,String n ,String d){
super(p,n);
numSomme=d;
}
public void travailler(){
System.out.println("travailler pour moi c est enseigner");
}
public void afficher(){
System.out.println("Mon DOTI est:"+numSomme);
}
}
Java - Dr A. Belangour

180

90

Les packages : solution


package b;
import a.Personne;
import a.Affichage;
public class Etudiant extends Personne implements Affichage{
private String CNE;
public Etudiant(String p,String n ,String c){
super(p,n);
CNE=c;
}
public void travailler(){
System.out.println("travailler pour moi cest tudier");
}
public void afficher(){
System.out.println("Mon CNE est:"+CNE);
}
}
Java - Dr A. Belangour

181

Les packages : solution


import b.Enseignant;
import b.Etudiant;
public class Test{
public static void main(String[] args){
Etudiant etu=new Etudiant("Hamza","Ali","2008/201");
Enseignant ens=new Enseignant("Hakim", "Omar","65744");
etu.afficher();
etu.travailler();
ens.afficher();
ens.travailler();
}
}

Java - Dr A. Belangour

182

91

Les packages : java archive


 Une application java est compose dun ensemble de
classes ranges dans zro ou plusieurs packages.
 Elle peut tre :



Un programme alors elle contient une classe principale


(disposant de main).
Une bibliothque non excutable.

 Pour livrer lapplication un client, il est souhaitable de


la compresser en fichier compress: un fichier .jar (java
archive).
 Commande :
 jar cf fichier.jar liste-fichiers-classes
 c: pour dire quon veut crer un fichier
 f: pour diriger le rsultat vers un fichier

Java - Dr A. Belangour

183

Les packages : java archive


 Exemple :
 jar cf application.jar *.class

 Le rsultat de cette commande serait un


fichier application.jar qui contient en
plus un fichier MANIFEST.MF contenant
des informations sur le fichier.
 Exemple :
 Manifest-Version: 1.0
 Created-By: 1.6.0 (Sun Microsystems Inc.)

Java - Dr A. Belangour

184

92

Les packages : java archive


 Pour crer un jar excutable, il faudra ajouter
au manifest les informations suivantes :
 La classe de dmarrage de lapplication :
Main-Class
 ventuellement, dautres jars utilis par ce
jar.
 Exemple :
 Manifest-Version: 1.0
 Created-By: nomDeLAuteur
 Main-Class: ClassePrincipale

Java - Dr A. Belangour

185

Les packages : java archive


 Commande :
 jar -cmf manifest.mf application.jar *.class *.gif
 m : pour inclure le manifest.

 Remarque :
 Ne pas oublier de retourner la ligne la fin du
fichier!

 Pour excuter un jar excutable il faut taper la


commande :
 Java jar application.jar

Java - Dr A. Belangour

186

93

Les packages : java archive


 Exercice :





reprendre lexercice prcdent


Crer un fichier manifest
Archiver le tout
Lancer son excution

Java - Dr A. Belangour

187

Les packages : java archive


 Solution :
 Fichier manifest.mf :
Manifest-Version: 1.0
Created-By: Moi
Main-Class: Test

 Commande darchivage:
 jar -cmf manifest.mf application.jar
Test.class a b Ou jar -cmf manifest.mf
application.jar *.*

 Commande dexecution :
 Java jar application.jar
Java - Dr A. Belangour

188

94

Chapitre 4
Les packages de bases

Introduction
 Le JDK se compose de nombreuses classes
regroupes selon leurs fonctionnalits en packages.
 La premire version du JDK tait compose de 8
packages qui constituent encore aujourd'hui les
packages de bases des diffrentes versions du JDK.
 Selon sa version, JDK contient un certain nombre de
packages, chacun tant constitu par un ensemble de
classes qui couvrent un mme domaine et apportent
de nombreuses fonctionnalits.
 Les diffrentes versions du JDK sont constamment
enrichies avec de nouveaux packages.

Java - Dr A. Belangour

190

95

Le package java.lang
 Ce package de base contient les classes
fondamentales tel que Object, Class, Math, System,
String, StringBuffer, Thread, les wrapper etc ...
 Certaines de ces classes sont dtailles dans les
sections suivantes.
 Il contient galement plusieurs classes qui permettent
de demander des actions au systme d'exploitation
sur laquelle la machine virtuelle tourne, par exemple
les classes ClassLoader, Runtime, SecurityManager.
 Ce package est tellement fondamental qu'il est
implicitement import dans tous les fichiers sources
par le compilateur.

Java - Dr A. Belangour

191

La classe Object
 C'est la super classe de toutes les classes Java :

ses mthodes sont donc hrites par toutes les classes.

 Mthodes :







getClass() : renvoie un objet de type Class reprsentant


la classe de l'objet.
toString() : renvoie le nom de la classe , suivi du
sparateur @, lui mme suivi par la valeur de hachage de
l'objet.
equals() : implmente une comparaison par dfaut. Sa
dfinition dans Object compare les rfrences : donc
obj1.equals(obj2) ne renverra true que si obj1 et obj2
dsignent le mme objet.
finalize() : est appele quand le ramasse miettes doit
rcuprer l'emplacement de l'objet ou quand la machine
virtuelle termine son excution.
clone() : renvoie une copie distincte dun objet. si lobjet
dorigine est ensuite modifi, sa copie ne sera pas affect.
Java - Dr A. Belangour

192

96

La classe String
 Une chane de caractres est contenue dans un objet
de la classe String
 On peut initialiser une variable String sans appeler
explicitement un constructeur : le compilateur se
charge de crer un objet.
 Exemple :


String uneChaine = "bonjour";

String uneChaine = new String("bonjour");

 Les objets de cette classe ont la particularit d'tre


constants.
 Les mthodes de String laisse l'objet d'origine
inchang et renvoie un nouvel objet String contenant
les modifications.
Java - Dr A. Belangour

193

La classe String
 Pour simplifier le traitement des chanes de caractre:


Un objet de type String est automatiquement cr lors


de l'utilisation d'une constante chane de caractres.

 Exemple :
public class TestChaines1 {
public static void main(String[] args) {
String chaine1 = "bonjour";
String chaine2 = "bonjour";
System.out.println("(chaine1 == chaine2) = " +
(chaine1 == chaine2) );
}
}

 Rsultat :


(chaine1 == chaine2) = true


Java - A. Belangour

194

Java - Dr A. Belangour

194

97

La classe String
 Pour obtenir une seconde instance de la chane, il faut
explicitement demander sa cration en utilisant
l'oprateur new.
 Exemple:

public class TestChaines2 {


public static void main(String[] args) {
String chaine1 = "bonjour";
String chaine2 = new String("bonjour");
System.out.println("(chaine1 == chaine2) = " + (chaine1 ==
chaine2) );
}
}

 Rsultat : (chaine1 == chaine2) = false


 Remarque :



les tests raliss dans ces deux exemples sont raliss sur les
rfrences des instances.
Pour tester l'galit de la valeur des chanes, il faut utiliser la
mthode equals() de la classe String.
Java - Dr A. Belangour

195

La classe String


Principales mthodes de la classe String :

















charAt(int) : renvoie le nime caractre de la chane


compareTo(String) : compare la chane avec l'argument
concat(String) : ajoute l'argument la chane et renvoie la nouvelle
chane
endsWith(String) : vrifie si la chane se termine par l'argument
equalsIgnoreCase(String) : compare la chane sans tenir compte de
la casse
indexOf(String) :renvoie la position de dbut laquelle l'argument
est contenu dans la chane
lastIndexOf(String) : renvoie la dernire position laquelle
l'argument est contenu dans la chane
lenght() : renvoie la longueur de la chane
replace(char,char) : renvoie la chane dont les occurrences d'un
caractre sont remplaces
startsWith(String ch) : Vrifie si la chane commence par la sous
chane
substring(int,int) : renvoie une partie de la chane
toLowerCase() : renvoie la chane en minuscule
toUpperCase() : renvoie la chane en majuscule
trim() : enlve les caractres non significatifs de la chane

Java - Dr A. Belangour

196

98

Les Wrappers
 Pour manipuler des types primitifs (comme pour
simuler le passage par adresse dans une mthode),
on a parfois besoin de les encapsuler dans des objets.
 Ces objets sont appeles Wrappers (enveloppeurs)
 Ils fournissent un ensemble de mthodes qui
permettent notamment de faire des conversions.
 Exemples :


Integer, Long, Float, Double, Character, Byte, Short,


Boolean,

Java - Dr A. Belangour

197

Les Wrappers


Les Wrappers ont deux constructeurs :


1.

Pour instanciation partir du type primitif.




2.

Pour instanciation partir d'un objet String.




Exemple : int x=3; Integer I= new Integer (x);

Exemple : Float f = new Float("3.1415");

Les mthodes de la forme intValue(), floatValue(),


doubleValue(), renvoient le primitif.

Exemple :


Integer ent = new Integer("10");

int i = ent.intValue();
Java - Dr A. Belangour

198

99

Les Wrappers


Quelques mthodes importantes (Integer pour exemple):




Integer valueOf(String s) : cre un objet Integer partir dune


chaine de caractre.

int parseInt(String s) : convertit une chane de caractre en


entier.

float floatValue() : retourne la valeur de cet entier comme un


float.

Quelques constantes (pour Integer, Long, Float et Double) :




MIN_VALUE : permet de connatre la valeur minimale que peut


accueillir le Wrapper

MAX_VALUE : permet de connatre la valeur maximale que


peut accueillir le Wrapper

Java - Dr A. Belangour

199

Les Wrappers
 Remarque :
 Les objets Wrappers ne sont pas interchangeables
avec les types primitifs d'origine.
 Exemple :
 Float objetpi = new Float("3.1415");
 System.out.println(5*objetpi); // erreur la compil

Java - Dr A. Belangour

200

100

Les Wrappers


Pour les wrapper Float et double le rsultat dune


opration peut tre :

1.

NEGATIVE_INFINITY

2.

POSITIVE_INFINITY

3.

NaN

Il existe des mthodes pour tester le rsultat :




Double.isNaN(double); //idem avec float

Double.isInfinite(double); // idem avec float

Remarques :


La constante NaN n'est ni gale un nombre dont la


valeur est NaN ni elle mme.

Java - Dr A. Belangour

201

La classe System
 Possde de nombreuses fonctionnalits pour utiliser
des services du systme d'exploitation.
 La classe System dfinit trois variables statiques qui
permettent d'utiliser les flux d'entre/sortie standards
du systme d'exploitation:
 in (de type PrintStream) : Entre standard du
systme. Par dfaut, c'est le clavier.
 out (de type InputStream) : Sortie standard du
systme. Par dfaut, c'est le moniteur.
 err (de type PrintStream) : Sortie standard des
erreurs du systme. Par dfaut, c'est le moniteur.

Java - Dr A. Belangour

202

101

Le package java.awt
 AWT est une collection de classes pour la ralisation
d'applications graphiques.
 Il se compose de plusieurs packages dont les
principaux sont:


java.awt : package de base de la bibliothque AWT

java.awt.images : pour la gestion des images

java.awt.event : pour la gestion des vnements


utilisateur

java.awt.font : pour les polices de caractres

java.axt.dnd : pour le cliquer/glisser

Java - Dr A. Belangour

203

Le package java.io
 Ce package dfinit un ensemble de classes pour la
gestion des flux d'entres-sorties
 Nous aurons loccasion de travailler avec les classes
de ce package de temps autre dans ce cours.

Java - Dr A. Belangour

204

102

Le package java.util
 Ce package contient des classes utilitaires :


la gestion des dates (Date et Calendar),

la gnration de nombres alatoires (Random),

la gestion des collections ArrayList,HashTable, Vector,


Stack...

 Certaines de ces classes seront prsentes plus en


dtail dans les sections suivantes.

Java - Dr A. Belangour

205

Les classes Date et Calendar


 la classe Date reprsente un temps spcifique avec
une prcision de millisecondes depuis le 1 Janvier
1970 00h:00min:00.000sec GMT.
 La classe Calendar est une classe abstraite pour la
conversion entre un objet Date et un ensemble de
champs entier comme YEAR, MONTH, DAY, HOUR
etc..
 La classe Calendar fournit une mthode de classe
getInstance() qui retourne un objet Calendar dont les
champs ont t initialiss avec le temps et la date
courante.
 Exemple :


Calendar maintenant = Calendar.getInstance();


Java - Dr A. Belangour

206

103

Les classes Date et Calendar


 La classe Date possde deux constructeurs :
 Date() : constructeur par dfaut qui initialise lobjet
avec la date courante.
 Date(long d) : Constructeur paramtr qui prend en
paramtre le nombre de millisecondes.

 Remarque :
 Les autres constructeurs ont t deprecated car
confis dautres classes.
 Exemple :
 Le constructeur Date(int year, int month, int date) a
t remplac par la mthode Calendar.set(year +
1900, month, date)

Java - Dr A. Belangour

207

Les classes Date et Calendar


 Quelques mthodes de la classe Date:
 boolean after(Date d) : teste si cette date est aprs
la date spcifie.
 boolean before(Date d) : teste si cette date est
avant la date spcifie.
 int compareTo(Date autreDate) : compare deux
dates pour classement.

 Exemple :
 Date d = new Date();
 System.out.println(DateFormat.getTimeInstance().for
mat(d));
 Rsultat  22:05:21
 Remarque :
 DateFormat est une classe pour le formatage de la
date (appartient java.text)
Java - Dr A. Belangour

208

104

Les classes Date et Calendar


 La classe Calendar sappuie sur la classe Date pour
clater les millisecondes en annes, mois, jours,
heures, etc.. :
 La principale mthode de la classe Calendar est : int
get(int champ).
 Quelques exemples :


Calendar.get(Calendar.MINUTE) ou Calendar.get(12)

alendar.get(Calendar.MONTH) ou Calendar.get(2)

Calendar.get(Calendar.SECOND) ou Calendar.get(13)

Calendar.get(Calendar.DAY_OF_MONTH) ou Calendar.get(5)

Calendar.get(Calendar.DAY_OF_WEEK) ou Calendar.get(7)

Java - Dr A. Belangour

209

Les classes Date et Calendar


 Voici une partie des constantes dfinies dans la classe
Calendar:


JANUARY (ou 0), .., DECEMBER (ou 11)

MINUTE (ou 12), SECOND (ou 13), HOUR (ou 10)

SUNDAY (ou 1), ,SATURDAY (ou 7)

etc.

 Ces constantes sont des champs statiques finaux.


 Pour les rfrencer il faut les prcder par le nom de
leur classe : Calendar
 Remarque :


Certaines de ces constantes ont la mme valeur comme


Monday et March qui refltes leurs ordres dans leurs
catgories respectives.
Java - Dr A. Belangour

210

105

Les classes Date et Calendar


 Exercice :


crire un programme permettant de savoir quel jour


nous sommes.

 Solution :
import java.util.Calendar;
public class testCalendear {
public static void main (String[] args) {
Calendar c = Calendar.getInstance();
int d=c.get(Calendar.DAY_OF_WEEK);
if (d== Calendar.MONDAY)
System.out.println(" nous sommes Lundi ");
if (d== Calendar.TUESDAY)
System.out.println(" nous sommes Mardi ");
Java - Dr A. Belangour

211

Les classes Date et Calendar


if (d== Calendar.WEDNESDAY)
System.out.println(" nous sommes
if (d== Calendar.THURSDAY)
System.out.println(" nous sommes
if (d== Calendar.FRIDAY)
System.out.println(" nous sommes
if (d== Calendar.SATURDAY)
System.out.println(" nous sommes
if (d== Calendar.SUNDAY)
System.out.println(" nous sommes
}
}

Mercredi ");
Jeudi ");
Vendredi ");
Samedi ");
Dimanche ");

Java - Dr A. Belangour

212

106

La classe Vector
 Reprsente un tableau volu.
 Les mthodes principales sont les suivantes :








void addElement(Object) : ajouter un objet dans le


vecteur
boolean contains(Object) :retourne true si l'objet est
dans le vecteur
Object elementAt(int) :retourne l'objet l'index
indiqu
Enumeration elements() : retourne une numration
contenant tous les lments du vecteur
Object firstElement() : retourne le premier lment
du vecteur (celui dont l'index est gal zro)
int indexOf(Object) : renvoie le rang de l'lment
void insertElementAt(Object, int) : insrer un objet
l'index indiqu

Java - Dr A. Belangour

213

La classe Vector








boolean isEmpty() : retourne un boolen si le vecteur


est vide
Objet lastElement() :retourne le dernier lment du
vecteur
void removeAllElements() : vider le vecteur
void removeElement(Object) : supprime l'objet du
vecteur
void removeElementAt(int) : supprime l'objet
l'index indiqu
void setElementAt(object, int) : remplacer l'lment
l'index par l'objet
int size() : nombre d'objet du vecteur

 Vector peut stocker des objets de classes diffrentes.


 Les types primitifs doivent tre encapsul dans des
wrappers avant leur stockage.
Java - Dr A. Belangour

214

107

La classe Vector
 Exemple :








Vector v = new Vector();


v.addElement(new Integer(10));
v.addElement(new Float(3.1416));
v.insertElementAt("chaine ",1);
System.out.println(" le vecteur contient "+v.size()+ "
elements ");
String retrouve = (String) v.elementAt(1);
System.out.println(" le 1er lment = "+retrouve);

 Rsultat :



C:\$user\java>java test9
le vecteur contient 3 lments le 1er lment = chane

 Exemple de parcours dun vecteur:


 for (int i = 0; i < v.size() ; i ++) {
System.out.println(v.elementAt(i)); }
Java - Dr A. Belangour

215

La classe Hashtable
 Les informations d'une Hastable sont stockes sous la
forme cl-donne. Cet objet peut tre considr
comme un dictionnaire.
 Exemple ( code Java 1.1 ) :
 Hashtable dico = new Hashtable();
 dico.put("livre1", "titre du livre 1 ");
 dico.put("livre2", "titre du livre 2 ");

 Il est possible d'utiliser n'importe quel objet comme


cl et comme donne
 Exemple ( code Java 1.1 ) :
 dico.put("jour", new Date());
 dico.put(new Integer(1),"premier");
 dico.put(new Integer(2),"deuxime");
Java - Dr A. Belangour

216

108

La classe Hashtable
 Pour lire dans la table, on utilise get(object) en
donnant la cl en paramtre.
 Exemple :


System.out.println(" nous sommes le "


+dico.get("jour"));

 La mthode remove(Object) permet de supprimer


une entre du dictionnaire correspondant la cl
passe en paramtre.
 La mthode size() permet de connatre le nombre
d'associations du dictionnaire.

Java - Dr A. Belangour

217

L'interface Enumeration
 L'interface Enumeration est utilise pour permettre le
parcours squentiel de collections.
 Surtout celles ne permettant pas laccs direct par un
index ( comme Hashtable )
 Linterface Enumeration dfinit 2 mthodes :


boolean hasMoreElements() : retourne true si


l'numeration contient encore un ou plusieurs elements

Object nextElement() : retourne l'objet suivant de


l'numration
 Elle lve une Exception NoSuchElementException si la fin
de la collection est atteinte.

Java - Dr A. Belangour

218

109

L'interface Enumeration
 Exemple : contenu d'un vecteur et liste des cls d'une
Hastable :
import java.util.*;
class test9 {
public static void main (String args[]) {
Hashtable h = new Hashtable();
Vector v = new Vector();
v.add("chaine 1"); v.add("chaine 2"); v.add("chaine
3");
h.put("jour", new Date());
h.put(new Integer(1),"premier");
h.put(new Integer(2),"deuxime");

Java - Dr A. Belangour

219

L'interface Enumeration
System.out.println("Contenu du vector");
for (Enumeration e = v.elements() ; e.hasMoreElements() ; )
{
System.out.println(e.nextElement());
}
System.out.println("\nContenu de la hashtable");
for (Enumeration e = h.keys() ; e.hasMoreElements() ; )
{
System.out.println(h.get(e.nextElement()));
}
}
}

Java - Dr A. Belangour

220

110

L'interface Enumeration
 Rsultat:










C:\$user\java>java test9
Contenu du vector
chaine 1
chaine 2
chaine 3
Contenu de la hashtable
jour
2
1

Java - Dr A. Belangour

221

L'interface Iterator
 Similaire Enumeration mais plus rcente.
 Offre en plus la possibilit de supprimer des lments
en cours dnumration
 Les noms de mthodes ont t raccourcis :


boolean hasNext() : retourne true si l'itrateur a


encore des lments

Object next() : retourne le prochain lment de


l'itrateur

void remove() : supprime de la collection sous-jacente


le dernier lment retourn par l'itrateur

Java - Dr A. Belangour

222

111

L'interface Iterator
 Exemple :
Un programme qui numre les mois du calendrier Hijri
en utilisant la classe ArrayList et linterface Iterator.
 N.B : le fonctionnement de ArrayList est similaire
Vector
import java.util.ArrayList ;
public class testIterator
{
public static ArrayList setMonths() {
ArrayList al = new ArrayList();
al.add("Moharram"); al.add("Safar");
al.add("Rabie 1");al.add("Rabie 2");al.add("Joumada 1");
al.add("Joumada 2"); al.add("Rajab");al.add("Chaabane");
al.add("Ramadane");al.add("Chawwal");
al.add("Doul Qieda"); al.add("Doul Hijja");
return al;
}


Java - Dr A. Belangour

223

L'interface Iterator
public static void main(String[] args){
ArrayList Hijri = setMonths();
Iterator it = Hijri.iterator();
System.out.println("les mois du calendrier Hijri sont :");
while (it.hasNext()) {
String mois = (String)it.next();
System.out.println("\t"+ mois);
}
}
}

Java - Dr A. Belangour

224

112

Le package java.net
 Ce package contient un ensemble de classes pour
permettre une interaction avec le rseau pour
permettre de recevoir et d'envoyer des donnes
travers ce dernier.

Java - Dr A. Belangour

225

Le package java.applet
 Ce package contient les classes ncessaires au
dveloppement des applets.
 Une applet est une petite application tlcharge
par le rseau et excute sous de fortes contraintes
de scurit dans une page Web par le navigateur.

Java - Dr A. Belangour

226

113

Chapitre 5
Interfaces graphiques avec AWT

Java - Dr A. Belangour

227

La bibliothque AWT
 Abrviation de Abstract Windows Toolkit
 Ensemble de classes et interfaces dcrivant les
composants graphiques, les polices, les
couleurs et les images.
 Permet d'crire des interfaces graphiques
indpendantes du systme d'exploitation sur
lesquelles elles vont fonctionner.
 Utilise le systme graphique de la plateforme
d'excution (Windows, MacOS,..) pour afficher
les objets graphiques.
Java - Dr A. Belangour

228

114

La bibliothque AWT
 Vue partielle de la hirarchie des classes de AWT

Java - Dr A. Belangour

229

La bibliothque AWT
 Les deux classes principales de AWT sont :
Component et Container.
 Chaque type d'objet de l'interface graphique
est une classe drive de Component.
 La classe Container hrite de Component
 Elle est capable de contenir tout objet
graphique drivant de Component.

Java - Dr A. Belangour

230

115

La classe Component
 Classe mre de tous les contrles graphiques de AWT.
 Contient de nombreuse mthodes hrites par tous
les composants graphiques.
 Les principales mthodes sont :











Rectangle getBounds(): renvoie la position actuelle et la taille des


composants.
void setBounds(int x, inty, int w, int h) : modifie la position et la
taille
void setEnabled(boolean) : active ou dsactive un composant
Color getBackGround() : renvoie la couleur actuelle d'arrire plan
void setBackground(Color) : dfinit la couleur d'arrire plan
Font getFont() : renvoie la la police de caractres utilise
void setFont(Font) :dfinit la police de caractres
Color getForeGround() : renvoie la couleur de premier plan
void setForeground(Color) : dfinit la couleur de premier plan
Container getParent() : renvoie le conteneur

Java - Dr A. Belangour

231

La classe Component














boolean contains(int x, int y) :indique si la coordonne cran


absolue se trouve dans l'objet
boolean isEnabled() : indique si l'objet est actif
boolean isShowing() : indique si l'objet est visible
boolean isVisible() :indique si l'objet est visible lorsque sont
conteneur est visible
Component getComponentAt(int x, int y) : retourne le composant
situ cet endroit.
Point getLocation(): retourne l'origine du composant
void setLocation(int x, int y) : dplace les composants vers la
position spcifie
void paint(Graphics) : dessine le composant
void paintAll(Graphics) : dessine le composant et sa contenance
void repaint() : redessine le composant
Dimension getSize() : dtermine la taille actuelle.
void setSize(int w, int h) : modifie la taille
void setVisible(boolean): affiche ou cache un composant.

Java - Dr A. Belangour

232

116

Les composants graphiques


 Pour utiliser un composant, il faut :
1. crer un nouvel objet reprsentant le composant
2. l'ajouter un conteneur qui existe avec la mthode
add().

 Exemple1 : Ajout d'un bouton un conteneur de type


Applet

import java.applet.*;
import java.awt.*;
public class AppletButton extends Applet
{
Button b = new Button(" Bouton ");
public void init()
{ super.init();
add(b);
}
}
Java - Dr A. Belangour

233

Les composants graphiques


 Exemple 2 : Ajout d'un bouton un conteneur de type
Frame

import java.awt.*;
public class testFrame {
public static void main(String[] args)
{
Frame f=new Frame("titre fentre");
Button b=new Button("je suis un boutton");
f.add(b);
f.pack();
f.setSize(300,300);
f.setVisible(true);
}
}

Java - Dr A. Belangour

234

117

Les conteneurs
 Sont des composants graphiques destins
contenir d'autres composants graphiques.
 L'insertion de composants dans un conteneur
se fait grce la mthode add() de la classe
Container.
 Les conteneurs de AWT sont :






Panel
Window
Dialog
Frame
Applet
Java - Dr A. Belangour

235

Le conteneur Panel
 C'est essentiellement un objet de rangement pour
d'autres composants.

 plac souvent dans un objet Frame


 La classe Panel possde 2 constructeurs :
 Panel()
 Panel(LayoutManager) : Permet de prciser un
gestionnaire de placement (layout manager)
 Exemple :
 Panel p = new Panel( );
 Button b = new Button(" bouton ");
 p.add( b);

Java - Dr A. Belangour

236

118

Le conteneur Window
 Fentre d'application sans bordure, ni barre de menus;
 C'est un conteneur, gr par dfaut par un
BorderLayout.
 Rarement instancie directement, on utilise ses sousclasses Dialog et Frame.
 La classe Window contient plusieurs mthodes dont voici
les plus utiles :


void pack() : Calcule la taille et la position de tous les


contrles de la fentre pour les positionner.

void setVisible(boolean) : Afficher la fentre quand le


boolean vaut True

void dispose() : Librer les ressources alloue la fentre

Java - Dr A. Belangour

237

Le conteneur Frame


Fentre encadre affichable, redimensionnable: fentre


typique d'une application graphique Java .

Il hrite de la classe Window qui ne s'occupe que de


l'ouverture de la fentre.

Dans une applet, elle n'apparat pas dans le navigateur


mais comme une fentre indpendante.

Il existe deux constructeurs :


1. Frame()
2. Frame(String)
 Exemple : Frame f = new Frame("titre ");

Java - Dr A. Belangour

238

119

Le conteneur Frame


Les principales mthodes sont :


 void setTitle(String) : dfinir le titre de la fentre
 String getTitle() :dterminer le titre de la fentre
 void setIconImage(Image) : dfinir l'icne de la fentre
 Image getIconImage(): dterminer l'icne actuelle de la
fentre
 void setCursor(int) : changer le pointeur de la souris dans
la fentre
 int getCursor() :dterminer la forme actuelle du curseur.
 void setMenuBar(MenuBar) : Dfinir la barre de menu
 MenuBar getMenuBar() : dterminer la barre de menus
actuelle
 boolean isResizeable() : dterminer si la taille est
modifiable
 void remove(MenuComponent) : Supprimer un menu
 void setResizeable(boolean) : dfinir si la taille peut tre
modifie

Java - Dr A. Belangour

239

Le conteneur Frame
 Exemple :

import java.awt.*;
public class TestFrame{
public static void main(String[] args){
Frame f = new Frame("titre");
Label lb= new Label("Hello");
f.add(lb);
f.setSize(300, 300);
f.setVisible(true);
}
}

Java - Dr A. Belangour

240

120

Le conteneur Frame
 Remarque 1:
 Le gestionnaire de mise en page par dfaut d'une
Frame est BorderLayout (FlowLayout pour une
applet).

 Remarque 2 :
 On peut hriter dune classe Frame et construire
notre interface graphique dans le constructeur
 Dans ce cas, rien quen appelant le constructeur,
notre interface est cre et affiche

Java - Dr A. Belangour

241

Le conteneur Frame
 Exemple:
import java.awt.*;
public class MaFrame extends Frame {
//constructeur
public MaFrame() {
super();
setTitle(" Titre de la Fenetre ");
setSize(300, 150);
setVisible(true); // affiche la fenetre
}
// mthode main
public static void main(String[] args) {
MaFrame mf=new MaFrame();
}
}
Java - Dr A. Belangour

242

121

Le conteneur Dialog
 Fentre de dialogue, dpendant d'une fentre Frame.
 La classe Dialog hrite de la classe Window.
 Dispose de plusieurs Constructeurs :


Dialog(Frame, String)

 Il prend comme paramtres :




la fentre laquelle appartient la bote de dialogue,

le titre de la bote,

 La mthode dispose() de la classe Dialog ferme la bote


et libre les ressources associes.

Java - Dr A. Belangour

243

Le conteneur Dialog
 Exemple :
import java.awt.*;
public class testDialog{
public static void main(String[] args) {
Frame f = new Frame("test");
f.setSize(200,200);
Dialog d=new Dialog(f,"dialogue");
Label l=new Label("Bonjour");
d.add(l);
d.setSize(50,50);
f.setVisible(true);
d.setVisible(true);
}
}

Java - Dr A. Belangour

244

122

Les stratgies de placement


 Pour organiser des composants graphiques dans un
conteneur il faut utiliser un gestionnaire de placement.
 Chaque stratgie de placement est gre par une classe
spcifique
 Il faudra instancier une de ces classes puis les associer
un conteneur comme suit :


objet-Container.setLayout(objet-Layout) ;

 Ces classes sont :


 FlowLayout, BorderLayout, GridLayout
 GridBagLayout, CardLayout, BoxLayout
 Remarque :
 Nous ne verrons que les trois premires
stratgies. Consulter le site de sun pour le dtail
des 3 restantes.
Java - Dr A. Belangour

245

Stratgie FlowLayout
 Cest le gestionnaire le plus simple.
 Il dispose les composants insrs, les uns aprs les
autres, de gauche droite et de haut en bas.
 Lorsque le conteneur est redimensionn les composants
sont repositionns selon le mme principe.
Par dfaut les lments
sont rangs au centre

three

one
two

Vous pouvez agir sur cela


en ajoutant une des
constantes suivantes au
constructeur :
four

Java - Dr A. Belangour

five

246

123

Stratgie FlowLayout


Exemple :
import java.awt.*;
public class testLayout {
public static void main(String[] args) {
Frame f = new Frame("test");
FlowLayout ly= new FlowLayout();
f.setLayout(ly);
f.setSize(200,200);
Button btn1 = new Button("boutton1"); btn1.setSize(20,50);
Button btn2 = new Button("boutton2"); btn2.setSize(20,50);
Button btn3 = new Button("boutton3"); btn3.setSize(20,50);
Button btn4 = new Button("boutton4"); btn4.setSize(20,50);
f.add(btn1);f.add(btn2); f.add(btn3);f.add(btn4);
f.setVisible(true);
}
}

Remarque : les lments sont rangs au centre,

Java - Dr A. Belangour

247

Stratgie BorderLayout
 BorderLayout divise l'espace utilisable en cinq
zones.
 Dans chacune de ces zones, vous pouvez qu'un
unique composant.
 Remarque :
 Rien n'empche que certains de ces composants
soient des containers.
North

West

Center

East

South
Java - Dr A. Belangour

248

124

Stratgie BorderLayout
 Exemple :

import java.awt.*;
public class testLayout {
public static void main(String[] args) {
Frame f = new Frame("test");
BorderLayout ly= new BorderLayout ();
f.setLayout(ly);
f.setSize(200,200);
Button btn1 = new Button("boutton1"); btn1.setSize(20,50);
Button btn2 = new Button("boutton2"); btn2.setSize(20,50);
Button btn3 = new Button("boutton3"); btn3.setSize(20,50);
Button btn4 = new Button("boutton4"); btn4.setSize(20,50);
Button btn5 = new Button("boutton5"); btn5.setSize(20,50);
f.add(btn1,BorderLayout.NORTH);f.add(btn2,BorderLayout.SOUTH);
f.add(btn3,BorderLayout.EAST);f.add(btn4,BorderLayout.WEST);
f.add(btn5,BorderLayout.CENTER);
f.setVisible(true);
}
}

Java - Dr A. Belangour

249

Stratgie GridLayout
 Permet de disposer les composants dans
une grille constitue de lignes et de
colonnes.
one

two

three

four

five

six

Java - Dr A. Belangour

250

125

Stratgie GridLayout
 Exemple :

import java.awt.*;
public class testLayout {
public static void main(String[] args) {
Frame f = new Frame("test");
GridLayout ly=new GridLayout(2,3);
f.setLayout(ly);
f.setSize(200,200);
Button btn1 = new Button("boutton1"); btn1.setSize(20,50);
Button btn2 = new Button("boutton2"); btn2.setSize(20,50);
Button btn3 = new Button("boutton3"); btn3.setSize(20,50);
Button btn4 = new Button("boutton4"); btn4.setSize(20,50);
Button btn5 = new Button("boutton5"); btn5.setSize(20,50);
f.add(btn1);f.add(btn2);f.add(btn3);f.add(btn4);f.add(btn5);
f.setVisible(true);
}
}

Java - Dr A. Belangour

251

Les tiquettes
 Les tiquettes (classe Label):
 Exemple 1:
 Label la = new Label( );
 la.setText("une etiquette");
 Exemple 2 :
 //avec alignement
 Label la = new Label("etiquette", Label.RIGHT);
 Exemple 3 :
 //modification dynamique des proprits
 la.setText("nouveau texte");
 la.setAlignment(Label.LEFT);

Java - Dr A. Belangour

252

126

Les boutons
 Les boutons (classe Button):
Il faut utiliser un objet de la classe
java.awt.Button
 Elle possde deux constructeurs :
1. Button() : constructeur par dfaut


 Button bouton = new Button();


 bouton.setLabel("bouton");

2. Button(String) : Permet de prciser le libell du


bouton
 Button bouton = new Button("bouton");

Java - Dr A. Belangour

253

Les listes droulantes


 Les listes droulantes ou combobox
(classe Choice):
 Ne possde qu'un seul constructeur qui est sans
paramtres. :
 Exemple :
 Choice maCombo = new Choice();

 Les mthodes add() et addItem() permettent


d'ajouter des lments la combo.
 Exemple :
 maCombo.addItem("element 1");
 maCombo.add("element 2");

Java - Dr A. Belangour

254

127

Les listes droulantes


 Mthodes permettent la gestion des
slections :
 void select( int ):
 slectionner un lment par son indice : le
premier lment correspond l'indice 0.
 Une exception IllegalArgumentException est
leve si l'indice ne correspond pas un
lment.
 Exemple:
 maCombo.select(0);

Java - Dr A. Belangour

255

Les listes droulantes


 void select(String) :
 slectionner un lment par son contenu
 Aucune exception est leve si la chane de
caractres ne correspond aucun lment.
 Exemple:
 maCombo.select("element 1");

 Int getItemCount() :
 Cette mthode permet d'obtenir le nombre
d'lments de la combo.
 Exemple :
 int n;
 n=maCombo.getItemCount();

Java - Dr A. Belangour

256

128

Les listes droulantes


 String getItem( int ):
 lire le contenu de l'lment d'indice n
 Exemple :
 String c = new String( );
 c = maCombo.getItem(n);

 String getSelectedItem() :
 dterminer le contenu de l'lment slectionn
 Exemple:
 String s = new String( );
 s = maCombo.getSelectedItem();

 int getSelectedIndex( ):
 dterminer l'index de l'lment slectionn
 Exemple :
 int n;
 n=maCombo.getSelectedIndex();
Java - Dr A. Belangour

257

La classe TextComponent
 La classe TextComponent
 La classe TextComponent est la classe mre de
TextArea et TextField.
 Elle dfinit un certain nombre de mthodes dont
ces classes hritent :
 String getSelectedText():
 Renvoie le texte slectionn

 int getSelectionStart():
 Renvoie la position de dbut de slection

 int getSelectionEnd() :
 Renvoie la position de fin de slection

 String getText():
 Renvoie le texte contenu dans l'objet

Java - Dr A. Belangour

258

129

La classe TextComponent
 boolean isEditable() :
 Retourne un booleen indiquant si le texte est
modifiable

 void select(int start, int end) :


 Slection des caractres situs entre start et
end

 void selectAll() :
 Slection de tout le texte

 void setEditable(boolean b) :
 Autoriser ou interdire la modification du texte

 void setText(String s) :
 Dfinir un nouveau texte
Java - Dr A. Belangour

259

Les zones de texte


 zone de texte (classe TextField )

 Possde plusieurs constructeurs :


 TextField()
 TextField( int ) : pr-determination du nombre
de caractres saisir
 TextField( String ) : avec texte par dfaut
 TextField( String, int ) : avec texte par dfaut
et nombre de caractres saisir
 Cette classe possde quelques mthodes utiles :
 String getText( ) :
 Lecture de la chane saisie
 Exemple :
 String saisie = new String();
 saisie = tf.getText( );

Java - Dr A. Belangour

260

130

Les zones de texte


 int getColumns( ) :
 lecture du nombre de caractres prdfini
 Exemple :


int i;

i = tf.getColumns( );

 void setEchoChar(char) :
 pour la saisie d'un mot de passe : remplace chaque
caractre saisi par celui fourni en paramtre;
 Exemple :


TextField tf = new TextField(10);

tf.setEchoChar('*');

Java - Dr A. Belangour

261

Zones de texte multilignes


 Zones de texte multilignes (classe
TextArea ):
 Il existe plusieurs constructeurs :
 TextArea()
 TextArea( int, int ) : avec pr-determination du
nombre de lignes et de colonnes
 TextArea( String ) : avec texte par dfaut
 TextArea( String, int, int ) : avec texte par
dfaut et taille

Java - Dr A. Belangour

262

131

Zones de texte multilignes


 Les principales mthodes sont :
 String getText() :
 lecture du contenu intgral de la zone de texte
 Exemple :
 String contenu = new String();
 contenu = ta.getText( );

 String getSelectedText()
 lecture de la portion de texte slectionne
 Exemple :
 String contenu = new String();
 contenu = ta.getSelectedText( );

Java - Dr A. Belangour

263

Zones de texte multilignes


 int getRows() :
 dtermination du nombre de lignes
 Exemple :
 int n = ta.getRows( );

 int getColumns( ) :
 dtermination du nombre de colonnes
 Exemple :
 int n = ta.getColumns( );

 void insert(String, int) :


 insertion de la chane la position fournie
 Exemple :
 String text = new String("texte insr");
 int n =10;
 ta.insert(text,n);

Java - Dr A. Belangour

264

132

Zones de texte multilignes


 void setEditable(boolean) :
 Autoriser la modification
 Exemple :
 ta.setEditable(false); //texte non modifiable

 void appendText(String) :
 Ajouter le texte transmis au texte existant
 Exemple :
 ta.appendText(String text);

 void replaceText(String, int, int)


 Remplacer par text le texte entre les positions start
et end
 Exemple :
 ta.replaceText(text, 10, 20);

Java - Dr A. Belangour

265

Les listes
 Les listes (classe List)

 Il existe plusieurs constructeurs :


 List( )
 List( int )Permet de prciser le nombre de
lignes affiches
 List( int, boolean )Permet de prciser le nombre
de lignes affiches et l'indicateur de slection
multiple
 Les principales mthodes sont :
 void addItem(String) : ajouter un lment en
fin de liste
 Exemple :


li.addItem("nouvel element");

Java - Dr A. Belangour

266

133

Les listes
 void addItem(String, int):
 insrer un lment un certain emplacement : le
premier element est en position 0
 Exemple ( code Java 1.1 ) :


li.addItem("ajout ligne",2);

 void delItem(int) :
 retirer un lment de la liste
 Exemple :


li.delItem(0); // supprime le premier element

 void delItems(int, int) :


 supprimer plusieurs lments conscutifs entre les deux
indices
 Exemple :


li.delItems(1, 3); //cette mthode est deprecated

Java - Dr A. Belangour

267

Les listes
 void clear() :
 effacement complet du contenu de la liste
 Exemple ( code Java 1.1 ) :
 li.clear( );

 void replaceItem(String, int):


 remplacer un lment
 Exemple :
 li.replaceItem("ligne", 1);

 int countItems():
 nombre d'lment de la liste
 Exemple :
 int n = li.countItems( );

Java - Dr A. Belangour

268

134

Les listes
 int getRows() :
 nombre de ligne de la liste
 Exemple:
 int n;
 n = li.getRows( );

 String getItem(int):
 Rcupre llment par sa position
 Exemple:
 String text = new String( );
 text = li.getItem(1);

 void select(int):
 slectionner un lment
 Exemple :
 li.select(0);

Java - Dr A. Belangour

269

Les listes
 void setMultipleSelections(boolean) :
 dterminer si la slection multiple est autorise
 Exemple :
 li.setMultipleSelections(true);

 void deselect(int) :
 dslectionner un lment
 Exemple ( code Java 1.1 ) :
 li.deselect(0);

 int getSelectedIndex( ) :
 dterminer l'lment slectionn en cas de slection
simple : renvoie l'indice ou -1 si aucun lment n'est
slectionn
 Exemple:
 int i=li.getSelectedIndex();

Java - Dr A. Belangour

270

135

Les listes
 int[] getSelectedIndexes( ):



dterminer les lments slectionnes en cas de slection


multiple
Exemple :
 int[] t=li.getSelectedIndexes();

 String getSelectedItem( ):



dterminer le contenu en cas de slection simple : renvoie


le texte ou null si pas de slection
Exemple :
 int[] t=li.getSelectedIndexes();

 String[] getSelectedItems():



dterminer les contenus des lments slectionns en cas


de slection multiple : renvoie les textes slectionns ou
null si pas de slection
Exemple :
 String[] texte= li.getSelectedItems();
 for (i = 0 ; i < texte.length(); i++)
 System.out.println(texte[i]);
Java - Dr A. Belangour

271

Les listes
 boolean isSelected(int):
 dterminer si un lment est slectionn
 Exemple ( code Java 1.1 ) :
 boolean selection;
 selection = li.isSelected(0);

 int getVisibleIndex():
 renvoie l'index de l'entre en haut de la liste
 Exemple ( code Java 1.1 ) :
 int top = li.getVisibleIndex();

 void makeVisible(int):
 assure que l'lment prcis sera visible
 Exemple :
 li.makeVisible(10);

Java - Dr A. Belangour

272

136

Les listes


Exemple :
import java.awt.*;
class TestList {
static public void main (String[] arg) {
Frame frame = new Frame("Une liste");
List list = new List(5,true);
list.add("element 0");
list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 4");
frame.add(list);
frame.pack();
frame.setVisible(true);
}
}

Java - Dr A. Belangour

273

Les cases cocher


 Les cases cocher (classe Checkbox )
 Il existe plusieurs constructeurs :
 Checkbox( )
 Checkbox( String) :
 avec une tiquette

 Checkbox( String,boolean) :
 avec une tiquette et un tat

 Checkbox(String,CheckboxGroup, boolean) :
 avec une tiquette, dans un groupe de cases
cocher et un tat

Java - Dr A. Belangour

274

137

Les cases cocher


 Les principales mthodes sont :
 void setLabel(String): modifier l'tiquette
 Exemple :


cb.setLabel( "libelle de la case : " );

 void setState( boolean ):fixer l'tat


 Exemple :


cb.setState( true );

 boolean getState() : consulter l'tat de la case


 Exemple :



boolean etat;
etat = cb.getState( );

 String getLabel() : lire l'tiquette de la case


 Exemple :



String commentaire = new String( );


commentaire = cb.getLabel( );

Java - Dr A. Belangour

275

Les boutons radio


 Les boutons radio (classes CheckboxGroup &
Checkbox)
 Exemple ( code Java 1.1 ) :
 CheckboxGroup rb= CheckboxGroup();
 Checkbox cb1 = new Checkbox("etiquette 1 ", rb,
etat1_boolean);
 Checkbox cb2 = new Checkbox("etiquette 2 ", rb,
etat1_boolean);
 Checkbox cb3 = new Checkbox("etiquette 3 ", rb,
etat1_boolean);

 Les principales mthodes sont :


 Checkbox getSelectedCheckbox () : retourne l'objet
Checkbox correspondant la rponse slectionne
 void setSelectedCheckbox (Checkbox) : Coche le
bouton radio pass en paramtre

Java - Dr A. Belangour

276

138

La classe Canvas
 La classe Canvas
 C'est un composant sans fonction particulire : il
est utile pour crer des composants graphiques
personnaliss.
 Il est ncessaire d'tendre la classe Canvas pour
en redfinir la mthode Paint().
 syntaxe :
 Canvas can = new Canvas( );

Java - Dr A. Belangour

277

La classe Canvas
 Exemple ( code Java 1.1 ) :

import java.awt.*;
public class MonCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(Color.black);
g.fillRect(10, 10, 100,50);
g.setColor(Color.green);
g.fillOval(40, 40, 10,10);
}
}
import java.applet.*;
import java.awt.*;
public class AppletButton extends Applet {
MonCanvas mc = new MonCanvas();
public void paint(Graphics g) {
super.paint(g);
mc.paint(g);
}
}
Java - Dr A. Belangour

278

139

Les menus
 Les menus
 Il faut insrer les menus dans des objets de la
classe Frame (fentre d'encadrement).
 Il n'est donc pas possible d'insrer directement
des menus dans une applet.
 Il faut crer une barre de menu et l'affecter la
fentre d'encadrement.
 Il faut crer ensuite crer les entres de chaque
menu et les rattacher la barre.
 Ajouter ensuite les lments chacun des
menus.

Java - Dr A. Belangour

279

Les menus


Exemple :

import java.awt.*;
public class testFrame {
public static void main(String[] args){
Frame f=new Frame(Titre fentre");
f.setSize(300, 150);
MenuBar mb = new MenuBar();
f.setMenuBar(mb);

Menu m = new Menu(" un menu ");


mb.add(m);
m.add(new MenuItem(" 1er element "));
m.add(new MenuItem(" 2eme element "));
Menu m2 = new Menu(" sous menu ");

Java - Dr A. Belangour

280

140

Les menus
CheckboxMenuItem cbm1 = new
CheckboxMenuItem(" menu item 1.3.1 ");
m2.add(cbm1);
cbm1.setState(true);
CheckboxMenuItem cbm2 = new
CheckboxMenuItem(" menu item 1.3.2 ");
m2.add(cbm2);
m.add(m2);
f.pack();
f.setVisible(true); // affiche la fenetre
}
}

Java - Dr A. Belangour

281

Les menus


Exemple : cration d'une classe qui dfinit un menu

import java.awt.*;
public class MenuFenetre extends MenuBar {
public MenuItem menuQuitter, menuNouveau, menuApropos;
public MenuFenetre() {
Menu menuFichier = new Menu(" Fichier ");
menuNouveau = new MenuItem(" Nouveau ");
menuQuitter = new MenuItem(" Quitter ");
menuFichier.add(menuNouveau);
menuFichier.addSeparator(); menuFichier.add(menuQuitter);
Menu menuAide = new Menu(" Aide ");
menuApropos = new MenuItem(" A propos ");
menuAide.add(menuApropos);
add(menuFichier);
setHelpMenu(menuAide);
}
}
Java - Dr A. Belangour

282

141

Les menus
 La mthode setHelpMenu() confre sous certaines
plateformes un comportement particulier ce
menu.
 La mthode setMenuBar() de la classe Frame prend
en paramtre une instance de la classe MenuBar.
 Cette instance peut tre directement une instance
de la classe MenuBar qui aura t modifie grce
aux mthodes add() ou alors une classe drive de
MenuBar qui est adapte aux besoins (voir
Exemple);

Java - Dr A. Belangour

283

Les menus


Exemple :
import java.awt.*;
public class testFrame {
public static void main(String[] args)
{
Frame f=new Frame("titre fentre");
f.setSize(300, 150);
MenuFenetre mf = new MenuFenetre();
f.setMenuBar(mf);
f.pack();
f.setVisible(true); // affiche la fenetre
}
}

Java - Dr A. Belangour

284

142

Les menus
 Les mthodes de la classe MenuBar

 void add(Menu)
 ajouter un menu dans la barre
 int countMenus()
 renvoie le nombre de menus utiliser la mthode
getMenuCount().
 Menu getMenu(int pos)
 renvoie le menu la position spcifie
 void remove(int pos)
 supprimer le menu la position spcifie
 void remove(Menu)
 supprimer le menu de la barre de menu

Java - Dr A. Belangour

285

Les menus
 Les mthodes de la classe Menu
 MenuItem add(MenuItem) / void add(String)
 ajouter une option dans le menu

 void addSeparator()
 ajouter un trait de sparation dans le menu

 int countItems()
 renvoie le nombre d'options du menu utiliser la
mthode getItemCount().

 MenuItem getItem(int pos)


 dterminer l'option du menu la position spcifie

 void remove(MenuItem mi)


 supprimer la commande spcifie

 void remove(int pos)


 supprimer la commande la position spcifie

Java - Dr A. Belangour

286

143

Les menus
 Les mthodes de la classe MenuItem
 void disable()
 dsactiver l'lment utiliser la mthode
setEnabled(false).

 void enable()
 activer l'lment utiliser la mthode setEnabled(true).

 void enable(boolean cond)


 dsactiver ou activer l'lment en fonction du
paramtre utiliser la mthode setEnabled(boolean).

 String getLabel()
 Renvoie le texte de l'lment

 boolean isEnabled()
 renvoie l'tat de l'lment (actif / inactif)

 void setLabel(String text)


 dfinir une nouveau texte pour la commande

Java - Dr A. Belangour

287

Les menus
 Les mthodes de CheckboxMenuItem
 boolean getState() :
 renvoie l'tat d'activation de l'lment
 void setState(boolean):
 dfinir l'tat d'activation de l'lment

Java - Dr A. Belangour

288

144

Exemple complet
 Construire linterface suivante :

Java - Dr A. Belangour

289

Exemple complet
MenuBar
Label

TextField

Choice
List

Panel

Checkbox

Button
Java - Dr A. Belangour

290

145

lments de la solution
// Text Field Panel
Panel tfPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
label = new Label("TextField");
tfdPanel.add(label);
textField = new TextField(15);
tfPanel.add(textField);

Java - Dr A. Belangour

291

lments de la solution
// Choice Panel
Panel chPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
label = new Label("Choice");
chPanel.add(label);
choice = new Choice();
choice.addItem("Solaris");
choice.addItem("Linux");
choice.addItem("Aix");
chPanel.add(choice);

Java - Dr A. Belangour

292

146

lments de la solution
// List Panel
Panel listPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
label = new Label("List");
listPanel.add(label);
list = new List();
list.addItem("Solaris");
list.addItem("Linux");
list.addItem("Aix");
listPanel.add(list);

Java - Dr A. Belangour

293

lments de la solution
// Checkbox Panel
Panel cbPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
cbSolaris = new Checkbox("Solaris");
cbPanel.add(cbSolaris);
cbLinux = new Checkbox("Linux");
cbPanel.add(cbLinux);
cbAix = new Checkbox("Aix");
cbPanel.add(cbAix);

Java - Dr A. Belangour

294

147

lments de la solution
// RadioButton Panel
Panel rbPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
rbGroup = new CheckboxGroup();
rbSolaris = new Checkbox("Solaris");
rbSolaris.setCheckboxGroup(rbGroup);
rbPanel.add(rbSolaris);
rbLinux = new Checkbox("Linux");
rbLinux.setCheckboxGroup(rbGroup);
rbPanel.add(rbLinux);
rbAix = new Checkbox("Aix");
rbAix.setCheckboxGroup(rbGroup);
rbPanel.add(rbAix);
rbGroup.setSelectedCheckbox(rbSolaris);

Java - Dr A. Belangour

295

lments de la solution
// Button Panel
Panel btPanel = new Panel(new FlowLayout(FlowLayout.LEFT));
okButton = new Button("Ok");
btPanel.add(okButton);
cancelButton = new Button("Cancel");
CancelButtonListener());
btPanel.add(cancelButton);

Java - Dr A. Belangour

296

148

lments de la solution
// Menu Bar
Menu procMenu = new Menu("Procedural");
procMenu.add(new MenuItem("Pascal"));
...
Menu ooMenu = new Menu("Object Oriented");
ooMenu.add(new MenuItem("SmallTalk"));
...
Menu funcMenu = new Menu("Functional");
funcMenu.add(new MenuItem("Lisp"));
...
Menu languageMenu = new Menu("Languages");
languageMenu.add(procMenu);
...
MenuBar mb = new MenuBar();
mb.add(languageMenu);

Java - Dr A. Belangour

297

lments de la solution
import java.awt.*;
public class testFrame {
public static void main(String[] args)
{
Frame f=new Frame("titre fentre");
// Widget, panel, menu bar creation
...
f.setMenuBar(mb);
f.setLayout(new GridLayout(0, 1, 2, 2));
f.add(textFieldPanel);
f.add(choicePanel);
f.add(listPanel);
f.add(checkboxPanel);
f.add(radioButtonPanel);
f.add(buttonPanel);
f.pack();
f.setVisible(true);
}
Java - Dr A. Belangour

298

149

Chapitre 6
Gestion des vnements

Java - Dr A. Belangour

299

Introduction
 Pour reprsenter les interactions entre l'interface et
l'utilisateur on recourt la notion d'vnement.
 Lorsquon clique sur un bouton par exemple, nous
avons 3 intervenants:
1. Le contrle sur lequel on a cliqu : source de
lvnement
2. La classe charg de traiter ce click : couteur ou
listener (parfois appel auditeur ou rcepteur aussi)
3. Lvnement lui-mme : reprsent par un objet

Java - Dr A. Belangour

300

150

Les objets vnements


 Tout vnement drive de la classe EventObject du
package java.util
 Les vnements gnres par une interaction
graphique drivent de la sous-classe AWTEvent du
package java.awt
 Exemple :
 bouton press,
 click souris,
 changement de taille des fentres,
 touches du clavier presses,
 etc...

Java - Dr A. Belangour

301

Les objets vnements


 Les vnements sont rangs en classes d'vnements.
 Elles correspondent des classes Java et sont trs
nombreuses :


MouseEvent : vnements causs par la souris,

KeyEvent : vnements causs par le clavier,

ActionEvent : vnements de clic sur un bouton, choix


dans un menu, etc.,

WindowEvent : vnements du cadre de l'application


(ouverture, changement de taille, iconification, etc.),

PaintEvent : vnement notifiant une fentre qu'elle


doit redessiner son contenu.

FocusEvent : vnement caus par lobtention du Focus

Java - Dr A. Belangour

302

151

Les objets vnements


 Remarque :
 Dans une classe d'vnements donne, les
vnements particuliers sont identifis par des
constantes de classe.
 Par exemple, la classe WindowEvent dfinit les
constantes :
 WINDOW_CLOSING,
 WINDOW_ICONIFIED,
 WINDOW_DEICONIFIED,

Java - Dr A. Belangour

303

Traiter un vnement
 Lorsquun vnement significatif pour lapplication
survient il doit tre trait.
 A chaque classe d'vnements sont associes une
ou plusieurs interfaces qui sont charges de le
traiter.
 Par exemple, lvnement MouseEvent sont
associes les interfaces :
 MouseListener (littralement auditeur de souris) et
 MouseMotionListener (auditeur des mouvements de
souris).

Java - Dr A. Belangour

304

152

Traiter un vnement
 L'interface MouseListener est ainsi dfinie :
public interface MouseListener extends EventListener {
void mouseClicked(MouseEvent e);
void mouseEntered(MouseEvent e);
void mouseExited(MouseEvent e);
void mousePressed(MouseEvent e);
void mouseReleased(MouseEvent e);
}

 Ainsi, la classe dun objet qui veut traiter les


vnements souris doit explicitement implmenter
l'interface MouseListener.
Java - Dr A. Belangour

305

Traiter un vnement
 Remarque :
 Une mthode sous la forme
addXXXListener() permet de lier une
classe Listener un contrle.

 Exemple-TP1:
 Traitement des vnements souris pour
une simple fentre graphique.
 tape 1 : cration de la classe Listener
 tape 2 : cration de la fentre et ligature
avec le Listener.

Java - Dr A. Belangour

306

153

Traiter un vnement
import java.awt.*;
import java.awt.event.*;
class MonListenerSouris implements MouseListener {
public void mouseClicked(MouseEvent e)
{
System.out.println("click souris");
}
public void mouseEntered(MouseEvent e)
{
System.out.println("entre souris");
}

Java - Dr A. Belangour

307

Traiter un vnement
public void mouseExited(MouseEvent e)
{
System.out.println("sortie souris");
}
public void mousePressed(MouseEvent e)
{
System.out.println("pression souris");
}
public void mouseReleased(MouseEvent e)
{
System.out.println("relchement souris");
}
}

Java - Dr A. Belangour

308

154

Traiter un vnement
import java.awt.*;
public class EvenementMouse{
public static void main(String[] args) {
Frame f = new Frame("test");
f.setSize(400,400);
MonListenerSouris ml=new MonListenerSouris ();
f.addMouseListener(ml);
f.setVisible(true);
}
}

Java - Dr A. Belangour

309

Traiter un vnement
 Exemple-TP 2 :
 Cration dune fentre avec un bouton quitter.

 tape 1 :
 Il faut crer une classe qui implmente linterface
ActionListener qui gre un clic sur un boutton
import java.awt.event.*;
public class monActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}

Java - Dr A. Belangour

310

155

Traiter un vnement


tape 2 :
Cration de la fentre, du bouton et association du bouton
avec une instance de cette classe.
import java.awt.*;
public class MyFrame extends Frame{
public MyFrame(){
//cration bouton et ajout du listener
Button btn=new Button("Quitter");
btn.setBounds(50,50,100,30);
monActionListener ma=new monActionListener ();
btn.addActionListener(ma);
//configuration de la fentre
this.setLayout(null);
this.setTitle("Test");
this.setSize(400, 400);
this.add(btn);
}
}


Java - Dr A. Belangour

311

Traiter un vnement
 tape 3 :
 Programme de test.
public class TestEvt{
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.setVisible(true);
}
}

 Remarque 1:
 Les instructions :
 monActionListener ma=new monActionListener ();
 btn.addActionListener(ma);
 Peuvent tre remplacs par :
 btn.addActionListener(new monActionListener ());

Java - Dr A. Belangour

312

156

Traiter un vnement
 Remarque 2:
 La classe implmentant une interface dun
vnement peut anonymement tre dfini
lintrieur de la mthode qui lajoute au contrle.
 Exemple :
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);

Java - Dr A. Belangour

313

Traiter un vnement
 Remarque 3:
 La classe MyFrame peut prendre en charge limplmentation
du listener comme suit.
import java.awt.*;
public class MyFrame extends Frame implements ActionListener
{
public MyFrame(){
//cration bouton et ajout du listener
Button btn=new Button("Quitter");
btn.setBounds(50,50,100,30);
btn.addActionListener(this);
//configuration de la fentre
this.setLayout(null);
this.setTitle("Test");
this.setSize(400, 400);
this.add(btn);
}
Java - Dr A. Belangour

314

157

Traiter un vnement
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}

 Programme de test.
public class TestEvt{
public static void main(String[] args) {
MyFrame f = new MyFrame();
f.setVisible(true);
}
}

Java - Dr A. Belangour

315

Adaptateurs
 Toute interface XXXListener dclare un
ensemble important de mthodes qui
couvrent une catgorie d'vnements.
 Une classe qui implmente une telle interface
doit donc implmenter toutes ces mthodes.
 Pour contourner ce problme on redfinit les
mthodes qui nous intressent et pour les
autres on les rcrit avec un contenu vide.

Java - Dr A. Belangour

316

158

Adaptateurs
 Exemple :
class MonListenerSouris implements MouseListener
{
public void mouseClicked(MouseEvent e) { /* code */}
public void mouseEntered(MouseEvent e) { /* rien */ }
public void mouseExited(MouseEvent e)

{ /* rien */ }

public void mousePressed(MouseEvent e) { /* rien */ }


public void mouseReleased(MouseEvent e) { /* rien */ }
}

 pour viter de telles corves nous faisons appel aux


Adaptateurs.

Java - Dr A. Belangour

317

Adaptateurs
 Un adaptateur est une classe qui nous permet de
ne dfinir que les mthodes qui nous intressent.
 Les classes adaptateurs ont la forme XXXAdapter
 Elles implmentent les interfaces XXXListener
 Elles fournissent une implmentation par dfaut de
toutes les mthodes des interfaces XXXListener.

Java - Dr A. Belangour

318

159

Adaptateurs
 Tout ce qui nous reste faire cest de les tendre et de
redfinir les mthodes qui nous intressent.
 Exemple :
class MonListenerSouris extends MouseAdapter {
public void mouseClicked(MouseEvent e)
{
System.out.println("click souris");
}
}

Java - Dr A. Belangour

319

Principales interfaces dcoute


 Il existe un nombre important dinterfaces d coute
(listeners) permettant de traiter tous les types
dvnements possibles.
 Nous ne verrons que les interfaces :


MouseListener

ActionListener

ComponentListener

FocusListener

WindowListener

TextListener

Java - Dr A. Belangour

320

160

Linterface MouseListener
 Nous avons dj vu cette interface dans lexemple.
 Ses mthodes gre un objet de type MouseEvent.
 Cet objet fournit toutes les informations sur
lvnement via un ensemble de mthodes.
 Les plus importantes sont :


int getButton() : indique quel bouton de la souris a t


cliqu.

int getX() : retourne la position X du click par rapport


au composant source.

int getY() : retourne la position Y du click par rapport au


composant source.

int getClickCount() : retourne le nombre de clicks


associ cet vnement
Java - Dr A. Belangour

321

Linterface ActionListener
 Traite les vnements comme lenfoncement dun
bouton ou le choix dun menu.
 Sa dclaration est comme suit :
public interface ActionListener extends EventListener {
void actionPerformed(ActionEvent e);

 Elle gre un vnement de type ActionEvent dont les


principales mthodes :


String getActionCommand() : retourne le texte associ


la commande source de laction.

long getWhen() : retourne le temps o lvnement


sest pass.

Java - Dr A. Belangour

322

161

Linterface ComponentListener
 Traite les vnements relatifs au dplacement,
redimensionnement, affichage et dissimulation dun
composant.
 Sa dclaration est comme suit :
public interface ComponentListener extends EventListener {
void componentHidden(ComponentEvent e)
void componentMoved(ComponentEvent e)
void componentResized(ComponentEvent e)
void componentShown(ComponentEvent e)
}

Java - Dr A. Belangour

323

Linterface ComponentListener
 La mthode :


void componentHidden(ComponentEvent e) : dtecte si un


composant rendu invisible,

void componentMoved(ComponentEvent e) : dtecte si


composant dplac,

void componentResized(ComponentEvent e) : dtecte si


changement de taille du composant,

void componentShown(ComponentEvent e) : dtecte si


composant rendu visible

Java - Dr A. Belangour

324

162

Linterface FocusListener
 Traite les vnements relatifs au gain ou la perte du
focus clavier.
 Sa dclaration est comme suit :
public interface FocusListener extends EventListener {
void focusGained(FocusEvent e) ;//focus gagn
void focusLost(FocusEvent e); //focus perdu
}
 Elle gre un vnement de type FocusEvent :


Component getOppositeComponent() : retourne le


composant concurrent qui a pris ou perdu le focus.

boolean isTemporary() : indique si le changement du


est temporaire ou permanent.
Java - Dr A. Belangour

325

Linterface WindowListener
 Traite les vnements relatifs une fentre.
 Sa dclaration est comme suit :
public interface WindowListener extends EventListener
{
void windowActivated(WindowEvent e)
void windowClosed(WindowEvent e)
void windowDeiconified(WindowEvent e)
void windowIconified(WindowEvent e)
void windowOpened(WindowEvent e)
}

Java - Dr A. Belangour

326

163

Linterface WindowListener
 Le dtail des mthodes est comme suit :
 void windowActivated(WindowEvent e) : fentre
active
 void windowClosed(WindowEvent e) : Fentre ferme
 void windowDeiconified(WindowEvent e) : Fentre
agrandie
 void windowIconified(WindowEvent e): Fentre
rduite
 void windowOpened(WindowEvent e) : Fentre
ouverte

Java - Dr A. Belangour

327

Linterface TextListener
 Cette interface permet de ragir aux modifications
de la zone de saisie ou du texte.
 Sa dclaration est comme suit :
public interface TextListenerextends EventListener
{
void textValueChanged(TextEvent e) ;
}

 La mthode textValueChanged() permet de savoir


si le texte a chang.
 Elle gre un vnement de type TextEvent.

Java - Dr A. Belangour

328

164

Principales classes dadaptation


 Il existe un important nombre de classes
dadaptation (environ 10)
 En voici quelques unes :
 La classe MouseAdapter
 La classe ComponentAdapter
 La classe FocusAdapter
 La classe WindowAdapter
 La classe ContainerAdapter

 Ces classes contiennent exactement les mmes


mthodes que les interfaces quils implmentent.

Java - Dr A. Belangour

329

Chapitre 8
La gestion des exceptions

165

Introduction
 Une exception est une erreur qui se produit
lors de l'excution d'un programme, et qui va
provoquer un fonctionnement anormal de ce
dernier.
 Exemple :
 Dans le programme suivant nous allons provoquer
dlibrment une division par zro pour voir le
comportement de Java.

Java - Dr A. Belangour

338

Exemple
public class Div1 {
public static int divint (int x, int y) {
return (x/y);
}
static void main (String [] args) {
int c=0,a=1,b=0;
c= divint(a,b);
System.out.println("res: " + c);
System.exit(0);
}
Le systme affiche l'erreur suivante:
}

Exception in thread "main" java.lang.ArithmeticException: / by


zero at Div.divint(Div.java:3) at Div.main(Div.java:7)

Java - Dr A. Belangour

339

166

La gestion des exceptions


 La gestion des exceptions se substitue en
quelque sorte l'algorithmique permettant
la gestion des erreurs.
 Dans l'exemple prcdent, nous aurions pu
crire :
if (y!=0)
return(x/y);
else
// traitement de l'erreur.
// par exemple : return (-1)
Java - Dr A. Belangour

340

La gestion des exceptions


 Remarque : Ce traitement devient fastidieux
la longue!
 Le langage Java offre un mcanisme qui
permet de :
1. Isoler la partie du code gnrant l'erreur du reste du
programme
2. Dissocier les oprations de dtection et de traitement
de cette erreur.

Java - Dr A. Belangour

341

167

La gestion des exceptions


 Si dans un bloc de code on fait appel une
mthode qui peut potentiellement gnrer une
exception, on doit la placer dans un bloc try.
 En cas derreur on doit prvoir un bloc catch
pour traiter cette exception.

Java - Dr A. Belangour

342

La gestion des exceptions


 Exemple :
public class Div2 {
public static int divint (int x, int y) { return (x/y); }
static void main (String [] args) {
int c=0,a=1,b=0;
try { c= divint(a,b);
}
catch (ArithmeticException e) {
System.out.println("Erreur a t capture");
}
System.out.println("res: " + c);
System.exit(0); //sortie du programme
}
}
Java - Dr A. Belangour

343

168

Mcanisme du traitement d'exception


 Lors de la dtection d'une erreur, un objet qui
hrite de la classe Exception est cr.
 Dans ce cas on dit qu'une exception est leve
 Remarque : dans ce cas les instructions qui
suivent le lancement de l'exception sont
ignores.
 Une exception se propage travers la pile
d'excution (de mthode appelante en autre)
jusqu' ce qu'il soit trait.
 Lorsquelle est traite (bloc catch) on dit quelle
est capture.
Java - Dr A. Belangour

344

Traitement de plusieurs exceptions


 Si il y a plusieurs type d'erreurs et d'exceptions
intercepter, il faut dfinir autant de bloc catch que de
type d'vnement .
 Il faut faire attention l'ordre des clauses catch pour
traiter en premier les exceptions les plus prcises
(sous classes) avant les exceptions plus gnrales.
 Un message d'erreur est mis par le compilateur dans
le cas contraire.

Java - Dr A. Belangour

345

169

Traitement de plusieurs exceptions


 Exemple:
public class TestException {
public static void main(String[] args) {
int i = 3;
int j = 0;
try {
System.out.println("rsultat = " + (i / j));
}
catch (ArithmeticException e)
{}
catch (Exception e)
{}
}
}

Java - Dr A. Belangour

346

Traitement de plusieurs exceptions


 Remarque :
 Il est possible de traiter plusieurs instruction
problmatique de cette faon :
try { }
Catch() {};
try {}
Catch() {} ;
try {}
Catch() {}

Java - Dr A. Belangour

347

170

Le bloc finally
 Certaines ressources peuvent rester non
libre aprs quune exception sois leve.
 Pour forcer le compilateur excuter certaines
instructions, quil y ait exception ou non, ils
doivent tre places dans un bloc finally.
 Remarque : Ce bloc est facultatif !

Java - Dr A. Belangour

348

Le bloc finally
 Exemple :
public class Div3 {
public static int divint (int x, int y) { return (x/y); }
static void main (String [] args) {
int c=0,a=1,b=0;
try { c= divint(a,b); }
catch (ArithmeticException e) {
System.out.println("Erreur a t capture"); }
finally {System.out.println("bloc finally"); }
System.out.println("res: " + c);
System.exit(0); //sortie du programme
}
}

Java - Dr A. Belangour

349

171

Lever une exception standard


 Java dispose dune multitude de classes exceptions qui
peuvent tre leve grce linstruction throw.
 Toute ces classes hritent de la classe Exception
 Exemple :
public class Div3 {
public static int divint (int x, int y) {
if (y==0) throw new ArithmeticException();
return (x/y);
}

Java - Dr A. Belangour

350

Lever une exception standard


public static void main (String [] args) {
int c=0,a=1,b=0;
try {
c= divint(a,b);
}
catch (ArithmeticException e) {
System.out.println("Erreur a t capture");
}
System.out.println("res: " + c);
System.exit(0);
}
}

Java - Dr A. Belangour

351

172

Lever une exception personnalise


 Pour lever une exception personnalise, il faut
commencer par dfinir la classe de cette
exception.
 Cette dernire dois hriter de la classe
Exception.
 Exemple :
class MaArithmeticException extends Exception {
// quelque chose
}
Java - Dr A. Belangour

352

Lever une exception personnalise


 Lutilisation de cette classe est comme suit :
public class Div4 {
public static int divint (int x, int y) throws MaArithmeticException
{
if (y==0) throw new MaArithmeticException();
return (x/y);

Java - Dr A. Belangour

353

173

Lever une exception personnalise


public static void main (String [] args) {
int c=0,a=1,b=0;
try {
c= divint(a,b);
}
catch (MaArithmeticException e) {
System.out.println("Erreur a t capture");
}
System.out.println("res: " + c);
System.exit(0);
}
}

Java - Dr A. Belangour

354

Lever une exception personnalise


 Remarque :
 Une mthode susceptible de lever une exception
qu'elle ne traite pas localement doit mentionner son
type dans son en-tte grce au mot rserv throws.

Java - Dr A. Belangour

355

174

Transmission d'information au
gestionnaire d'exception
 Comme les exceptions hritent de la classe
Exception, on peut personnaliser le message
derreur mis de deux faons :
1. Dfinir une mthode message() par exemple.
Exemple :
public class MaArithmeticException extends Exception {
public void message() {
System.out.println("Erreur a t capture dans
MonArithmeticException");

}
Java - Dr A. Belangour

356

Transmission d'information au
gestionnaire d'exception
 Exemple dutilisation :
public class Div6 {
public static int divint (int x, int y) throws MaArithmeticException {
if (y==0) throw new MaArithmeticException();
return (x/y); }
public static void main (String [] args) {
int c=0,a=1,b=0;
try { c= divint(a,b);
}
catch (MaArithmeticException e) { e.message(); }
System.out.println("res: " + c);
System.exit(0);
}
}

Java - Dr A. Belangour

357

175

Transmission d'information au
gestionnaire d'exception
2. Passer par le constructeur de la classe Exception :
Exemple:
public class MaArithmeticException extends Exception {
MaArithmeticException(String message){
super(message);
}
}

Java - Dr A. Belangour

358

Transmission d'information au
gestionnaire d'exception
 Exemple dutilisation :
public class Div7 {
public static int divint (int x, int y) throws
MaArithmeticException {
if (y==0) throw new MaArithmeticException( "Erreur a t
capture dans MonArithmeticException");
return (x/y); }
public static void main (String [] args) {
int c=0,a=1,b=0;
try { c= divint(a,b);
}
catch (MaArithmeticException e) { e.getMessage(); }
System.out.println("res: " + c);
System.exit(0);
}
}
Java - Dr A. Belangour

359

176

Hirarchie des exceptions


Object

Throwable

Error

Exception

RunTimeException

IOException

Java - Dr A. Belangour

360

Hirarchie des exceptions


 La classe Throwable
 Classe de base pour le traitements des erreurs.
 Possde quatre constructeurs :
 Throwable()
 Throwable(String) : La chane en paramtre permet de
dfinir un message qui dcrit l'exception et qui pourra
tre consulte dans un bloc catch.
 Throwable(Throwable cause) : dans le cas ou
lexception est cause par une autre exception.
 Throwable(String message, Throwable cause)

 Principales mthodes :
 String getMessage( ) : lecture du message
 void printStackTrace( ) : affiche l'exception et l'tat
de la pile dexcution au moment de son appel
Java - Dr A. Belangour

361

177

Hirarchie des exceptions


 Exemple:
public class TestException {
public static void main(java.lang.String[] args) {
int i = 3; int j = 0;
try {
System.out.println("rsultat = " + (i / j));
}
catch (ArithmeticException e) {
System.out.println("getmessage="+e.getMessage());
System.out.println("toString = "+e.toString());
System.out.println("printStackTrace="+e.printStackTrace());
}
}
Rsultat :
}
C:>java TestException

getmessage = / by zero
toString = java.lang.ArithmeticException: / by zero
printStackTrace = java.lang.ArithmeticException: /
by zero at
tests.TestException.main(TestException.java:24)
Java - Dr A. Belangour

362

Hirarchie des exceptions


 Classes Exception, RunTimeException et
Error


La classe Error reprsente une erreur grave intervenue dans


la machine virtuelle Java ou dans un sous systme Java.

L'application Java s'arrte instantanment ds l'apparition


d'une exception de la classe Error.

La classe Exception reprsente des erreurs moins graves.

Les exceptions hritant de classe RuntimeException n'ont


pas besoin d'tre dtectes imprativement par des blocs
try/catch.

Java - Dr A. Belangour

363

178

Control des exceptions


 Lorsque Java oblige la dclaration des exceptions
dans l'en tte de la mthode, ces exceptions sont
dites contrles (checked).

 Massage de Java : nom-exception must be


caught or it must be declared in the throws
clause of this method .

Java - Dr A. Belangour

364

Control des exceptions


 Les exceptions et erreurs qui hritent de
RunTimeException et de Error sont non contrles.
 Toutes les autres exceptions sont contrles.
 Les exceptions non contrles (unchecked) peuvent
tre captures mais n'ont pas a tre dclares.

Java - Dr A. Belangour

365

179

Chanage des exceptions


 Il est courant durant le traitement d'une
exception de lever une autre exception.
 Pour ne pas perdre la trace de l'exception
d'origine, Java propose le chanage
d'exceptions pour conserver l'empilement des
exceptions leves durant les traitements.

Java - Dr A. Belangour

366

Chanage des exceptions


 Il y a deux faons de chaner deux exceptions :
 Utiliser la surcharge du constructeur de Throwable
qui attend un objet Throwable en paramtre
reprsentant la cause.
 Utiliser la mthode initCause() d'une instance de
Throwable

Java - Dr A. Belangour

367

180

Chanage des exceptions


 Exemple :
import java.io.*;
public class TestExceptionChainee {
public static void main( String[] args) {
try {
String donnees = lireFichier();
System.out.println("donnees=" + donnees);
}
catch (MonException e) {
e.printStackTrace();
}
}

Java - Dr A. Belangour

368

Chanage des exceptions


public static String lireFichier() throws MonException {
File fichier = new File("c:/tmp/test.txt");
FileReader reader = null;
StringBuffer donnees = new StringBuffer();
try {
reader = new FileReader(fichier);
char[] buffer = new char[2048];
int len;
while ((len = reader.read(buffer)) > 0) {
donnees.append(buffer, 0, len);
}
}
catch (IOException e) {
throw new MonException("Impossible de lire le fichier", e);
}
Java - Dr A. Belangour

369

181

Chanage des exceptions


finally {
try {
if (reader != null)
reader.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
return donnees.toString();
} // fin lireFichier
}// fin classe

Java - Dr A. Belangour

370

Chanage des exceptions


 Rsultat :
MonException: Impossible de lire le fichier
at TestExceptionChainee.lireFichier(TestExceptionChainee.java:33)
at TestExceptionChainee.main(TestExceptionChainee.java:12)
Caused by: java.io.FileNotFoundException: c:\tmp\test.txt (The system
cannot find the path specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileReader.<init>(FileReader.java:55)
at TestExceptionChainee.lireFichier(TestExceptionChainee.java:26)
... 1 more

Java - Dr A. Belangour

371

182

Chanage des exceptions


 La mthode getCause() hrite de Throwable permet
d'obtenir l'exception qui est l'origine de l'exception.
 Exemple :
public static void main( String[] args) {
try {
String donnees = lireFichier();
System.out.println("donnees=" + donnees);
}
catch (MonException e) {
System.out.println(e.getCause().getMessage());
}
}

 Rsultat : c:\tmp\test.txt (The system cannot find the path specified)


Java - Dr A. Belangour

372

Chapitre 9
Les threads

183

Introduction
 Un Thread est une portion de code capable de
s'excuter en parallle d'autres traitements.
 les Threads ne s'excutent pas en mme temps
mais en temps partag pour laisser la chance
aux autres threads de s'excuter.
 La gestion des threads par le systme
d'exploitation est appele Scheduling .

Java - Dr A. Belangour

374

Partage de temps entre threads


 Il existe deux grands types de scheduller:
 le dcoupage de temps : attribue un intervalle de
temps prdfini quelque soit le thread et sa priorit
(Windows et Macintosh OS)
 la premption : attribue les intervalles de temps en
tenant compte de la priorit d'excution de chaque
thread(Unix).

Java - Dr A. Belangour

375

184

Partage de temps entre threads


 Exemple : Le schma ci-dessous illustre les
temps d'excution et de latence de quatre
threads.
temps de
latence

temps
dexcution

Java - Dr A. Belangour

376

Cration dun Thread


 En java, il existe deux faons de crer un
thread :
1. Hriter de la classe Thread
2. Implmenter linterface Runnable

 Remarques :


Dans le cas ou votre classe hrite dune autre classe,


utilisez la deuxime option.

La classe Thread implmente linterface Runnable

Java - Dr A. Belangour

377

185

Cration dun Thread


 Exemple :


Programme lanant 3 threads simples affichant :




10 fois bonjour pour le premier thread

12 fois bonsoir pour le deuxime thread

5 fois un retour la ligne pour le troisime thread

Java - Dr A. Belangour

378

Threads avec la classe Thread


 Mthode 1 : En hritant de la classe Thread


La classe Thread dispose dune mthode run()


( redfinir) pour lexcution du thread

La mthode start() se charge de lancer lexcution

Pour donner loccasion aux autres threads de


sexcuter la mthode sleep(t) doit tre invoque

t : est le temps en millisecondes

Java - Dr A. Belangour

379

186

Threads avec la classe Thread


class Ecrit extends Thread
{ //attribus
private String texte;
private int nb;
private long attente;
//constructeurs
public Ecrit (String texte, int nb, long attente){
this.texte = texte;
this.nb =nb;
this. attente = attente;
}

Java - Dr A. Belangour

380

Threads avec la classe Thread


public void run (){
try {
for (int i =0; i<nb; i++){
System.out.print(texte);
sleep(attente);
}
}
catch(InterruptedException e){}//impose par sleep
}
}

Java - Dr A. Belangour

381

187

Threads avec la classe Thread


class TestThread1 {
public static void main(String[] args) {
Ecrit e1= new Ecrit("bonjour",10,5);
Ecrit e2= new Ecrit("bonsoir",12,10);
Ecrit e3= new Ecrit("\n",5,15);
e1.start();
e2.start();
e3.start();
}
}
Remarque : lappel direct run() naurait pas provoqu la
simultanit.

Java - Dr A. Belangour

382

Threads avec linterface Runnable


 Mthode 2 : En implmentant linterface
Runnable


Cette mthode est prvue si notre classe hrite dj


dune autre classe

Aprs linstanciation de notre classe, les objets crs


sont passs comme paramtre au constructeur de la
classe Thread.

Java - Dr A. Belangour

383

188

Threads avec linterface Runnable


class Ecrit implements Runnable
{ //attribus
private String texte;
private int nb;
private long attente;
//constructeurs
public Ecrit (String texte, int nb, long attente){
this.texte = texte;
this.nb =nb;
this. attente = attente;
}

Java - Dr A. Belangour

384

Threads avec linterface Runnable


public void run (){
try {
for (int i =0; i<nb; i++){
System.out.print(texte);
Thread.sleep(attente);
}
}
catch(InterruptedException e){}//impose par sleep
}
}

Java - Dr A. Belangour

385

189

Threads avec linterface Runnable


class TestThread2 {
public static void main(String[] args) {
Ecrit e1= new Ecrit("bonjour",10,5);
Ecrit e2= new Ecrit("bonsoir",12,10);
Ecrit e3= new Ecrit("\n",5,15);
Thread t1= new Thread(e1);
t1.start();
Thread t2= new Thread(e2);
t2.start();
Thread t3= new Thread(e3);
t3.start();
}
}
Java - Dr A. Belangour

386

Interruption dun thread


 Il existe des threads qui tournent indfiniment (comme
les threads de surveillance dappels dans un serveur
Web)
 Un thread peut avoir besoin dinterrompre un autre.
 La mthode interrupt() de la classe Thread permet
dinterrompre un thread.
 La mthode statique interrupted() permet de savoir si
un thread est dj interrompu.

Java - Dr A. Belangour

387

190

Interruption dun thread


class Ecrit extends Thread
{ //attribus
private String texte;
private long attente;
//constructeurs
public Ecrit (String texte, long attente){
this.texte = texte;
this. attente = attente;
}

Java - Dr A. Belangour

388

Interruption dun thread


public void run (){
try {
while (true){ //boucle infinie
if( interrupted() ) return;
System.out.print(texte);
sleep(attente);
}
}
catch(InterruptedException e){}//impose par sleep
}
}

Java - Dr A. Belangour

389

191

Interruption dun thread


import java.util.Scanner;
class TestThread3 {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
Ecrit e1= new Ecrit("bonjour",5);
Ecrit e2= new Ecrit("bonsoir",10);
Ecrit e3= new Ecrit("\n",15);
e1.start();e2.start();e3.start();
s.next();//attente
e1.interrupt();
Sytem.out.println("arrt du 1er thread");
s.next(); //attente
e2.interrupt(); e3.interrupt();
Sytem.out.println("arrt des deux derniers threads");
Java - Dr A. Belangour
}}

390

Interruption dun thread


 Remarques :
 La mthode statique interrupted() de la classe Thread
remet false lindicateur de demande darrt.
 La mthode non statique isInterrupted() examine
lindicateur de lobjet thread correspondant sans le
modifier.

Java - Dr A. Belangour

391

192

Threads dmons
 Gnralement, l'activit d'un objet actif se
termine au bout d'un temps fini.
 Un tel thread s'appelle un thread utilisateur.
 Un programme Java ne peut se terminer que
quand tous les threads utilisateurs sont euxmmes termins.
 Tous les exemples de thread donns jusqu'
prsent sont dans cette catgorie.
Java - Dr A. Belangour

392

Threads dmons
 Cependant pour certaines activits il peut tre
trs difficile de trouver une condition d'arrt.
 Exemple : capteur dclenchant une alarme ds
qu'un seuil de tolrance est dpass : on ne
veut pas qu'une activit aussi critique puisse se
terminer prmaturment par erreur !
 Pour grer ce genre d'activit, Java introduit la
notion de threads dmons.
Java - Dr A. Belangour

393

193

Threads dmons
 Un thread dmon est un thread qui propose un
service gnral en tche de fond aussi
longtemps que le programme tourne, mais il
n'est pas l'essence du programme.
 Il ne sert qu lancer dautres threads.
 Un programme se termine lorsquil ne reste
plus que des threads dmons.
 La mthode main() est un Thread utilisateur.
Java - Dr A. Belangour

394

Threads dmons
 Par dfaut, un thread est cr dans la
catgorie du thread qui la cr.
 Pour rendre un thread Dmon, il faut utiliser la
mthode setDaemon(true) avant dappeler la
mthode start().

Java - Dr A. Belangour

395

194

Threads dmons
class Ecrit extends Thread
{ //attribus
private String texte;
private long attente;
//constructeurs
public Ecrit (String texte, long attente){
this.texte = texte;
this. attente = attente;
}

Java - Dr A. Belangour

396

Threads dmons
public void run (){
try {
while (true){ //boucle infinie
if( interrupted() ) return;
System.out.print(texte);
sleep(attente);
}
}
catch(InterruptedException e){}//impose par sleep
}
}

Java - Dr A. Belangour

397

195

Threads dmons
import java.util.Scanner;
class TestThread3 {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
Ecrit e1= new Ecrit("bonjour",10,5);
Ecrit e2= new Ecrit("bonsoir",12,10);
Ecrit e3= new Ecrit("\n",5,15);
e1.setDeamon(true);e1.start();
e2.setDeamon(true);e2.start();
e3.setDeamon(true);e3.start();
s.next();
}
}

Java - Dr A. Belangour

398

Threads dmons
 Remarque :
 Le thread main sarrte avec la dernire
instruction (lecture du clavier).
 Ils ne restent plus que des dmons.
 Ils sont alors arrts brutalement !

Java - Dr A. Belangour

399

196

Coordination de threads
 Lavantage des threads sur les processus est
quils appartiennent un mme programme.
 On peu donc tre confront deux types de
problmes :
 Des fois, ils ont besoin daccder un mme objet.
 Des fois encore un thread doit attendre le rsultat
dun autre thread qui nas pas encore fini.

Java - Dr A. Belangour

400

Coordination de threads
 Pour rgler le premier problme on utilise des
mthodes synchronises ou parfois juste des
blocs synchroniss.
 Pour rgler le deuxime problme, on utilise
des mcanisme dattente et de notification.

Java - Dr A. Belangour

401

197

Mthodes synchronises
 Soit deux threads rptant indfiniment les
actions suivantes:
 Incrmentation dun nombre et calcul de son carr
(premier thread)
 Affichage du nombre et de son carr (deuxime
thread)

Java - Dr A. Belangour

402

Mthodes synchronises
 Si le premier thread est interrompu entre
lincrmentation et le calcul du carr, le second
risque dafficher le nouveau nombre et lancien
carr.
 Solution java : dclarer une mthode avec le
mot cl synchronized.
 A un instant donn, une seule mthode dun
objet donne peut tre appele.
Java - Dr A. Belangour

403

198

Mthodes synchronises
 Exemple :
class Nombres
{ private int n=0, carre ;
/* les mthodes calcul et affiche sont mutuellement
exclusives */
public synchronized void calcul()
{ n++ ;
carre = n*n ;
}
public synchronized void affiche ()
{ System.out.println (n + " a pour carre " + carre) ;
}
}
Java - Dr A. Belangour

404

Mthodes synchronises
class ThrCalc extends Thread{
private Nombres nomb ;
public ThrCalc (Nombres nomb) { this.nomb = nomb ;}
public void run () {
try{
while (!interrupted()) {
nomb.calcul () ;
sleep (50) ;
}
}
catch (InterruptedException e) {}
}
}

Java - Dr A. Belangour

405

199

Mthodes synchronises
class ThrAff extends Thread {
private Nombres nomb ;
public ThrAff (Nombres nomb){
this.nomb = nomb ;
}
public void run () {
try {
while (!interrupted()) { nomb.affiche() ; sleep (75) ; }
}
catch (InterruptedException e) {}
}
}

Java - Dr A. Belangour

406

Mthodes synchronises
import java.util.Scanner;
public class Synchro1{
public static void main (String args[])
{
Scanner s= new Scanner(System.in);
Nombres nomb = new Nombres() ;
Thread calc = new ThrCalc (nomb) ;
Thread aff = new ThrAff (nomb) ;
System.out.println ("Suite de carres - tapez retour pour
arreter") ;
calc.start() ; aff.start() ;
s.next() ;
calc.interrupt() ; aff.interrupt() ;
}
}
Java - Dr A. Belangour

407

200

Notion de verrou
 Lorsquune mthode synchronise est appele sur un
objet, un verrou lui est attribu sur lobjet de telle faon
quaucune autre mthode synchronise ne peut tre
appele.
 Lobjet est dverrouill la sortie de la mthode.
 Si une mthode synchronise appelle une autre mthode
non synchronise, lobjet se trouve dverrouill pendant
cet appel.

Java - Dr A. Belangour

408

Interblocage
 Il arrive que deux ou plusieurs threads
sinterbloquent mutuellement.
 Exemple de situation dinterblocage :
 Un thread T1 possde le verrou dun objet O1 et
attend le verrou dun autre objet O2
 Un thread T2 possde le verrou dun objet O2 et
attend le verrou dun autre objet O1

 Cette situation sappelle treinte mortelle

Java - Dr A. Belangour

409

201

Lattente et la notification
 Pour sortir dune telle situation il faut
coordonner lexcution des threads.
 En effet, une mthode synchronise peut
appeler la mthode wait() de lobjet dont elle
possde le verrou permettant de :
 Rendre le verrou lenvironnement (qui peut
lattribuer une autre mthode synchronise)
 Mettre en attente le thread correspondant.

Java - Dr A. Belangour

410

Lattente et la notification
 Plusieurs threads peuvent tre en attente sur
le mme objet.
 Tant quun thread est en attente
lenvironnement ne lui donne pas la main.
 La mthode notifyAll() prvient tous les
threads en attente sur un objet et leur donne
la possibilit de sexcuter.
 La mthode notify() prvient un seul thread.
Java - Dr A. Belangour

411

202

Lattente et la notification
 Exemple 1 : Programmant grant une rserve
de nombres. Il comporte :
 Un thread qui ajoute une quantit donne
 Deux threads qui puisent chacun une quantit
donne.

 Remarque : un thread ne peut puiser dans la


rserve que si elle contient une quantit
suffisante.

Java - Dr A. Belangour

412

Exemple (1/4)
class Reserve extends Thread {
private int stock = 500 ; // stock initial = 500
public synchronized void puise (int v) throws InterruptedException
{ if (v <= stock) { System.out.print ("-- on puise " + v) ; stock -= v ;
System.out.println (" et il reste " + stock ) ; }
else { System.out.println ("** stock de " + stock+ " insuffisant pour
puiser " + v ); wait() ; }
}
public synchronized void ajoute (int v)
{ stock += v ;
System.out.println ("++ on ajoute " + v + " et il y a maintenant " +
stock) ; notifyAll() ;
}
}

Java - Dr A. Belangour

413

203

Exemple (2/4)
class ThrAjout extends Thread {
private int vol ;
private Reserve r ;
private int delai ;
public ThrAjout (Reserve r, int vol, int delai) {
this.vol = vol ; this.r = r ; this.delai = delai ;
}
public void run ()
{ try { while (!interrupted()) { r.ajoute (vol) ; sleep (delai) ; }}
catch (InterruptedException e) {}
}
}

Java - Dr A. Belangour

414

Exemple (3/4)
class ThrPuise extends Thread{
private int vol ;
private Reserve r ;
private int delai ;
public ThrPuise (Reserve r, int vol, int delai) {
this.vol = vol ; this.r = r ; this.delai = delai ; }
public void run (){
try{
while (!interrupted()) { r.puise (vol) ; sleep (delai) ; }
}
catch (InterruptedException e) {}
}
}

Java - Dr A. Belangour

415

204

Exemple (4/4)
import java.util.Scanner;
public class Synchronisation
{ public static Scanner s=new Scanner();
public static void main (String args[]) {
Reserve r = new Reserve () ;
ThrAjout ta1 = new ThrAjout (r, 100, 15) ;
ThrAjout ta2 = new ThrAjout (r, 50, 20) ;
ThrPuise tp = new ThrPuise (r, 300, 10) ;
System.out.println ("Suivi de stock - faire entree pour arreter");
ta1.start () ; ta2.start () ; tp.start () ;
s.next() ;
ta1.interrupt () ; ta2.interrupt () ; tp.interrupt () ;
}
}

Java - Dr A. Belangour

416

Lattente et la notification
 Exemple 2 :
 Dans lavant dernier exemple concernant :
 LIncrmentation dun nombre et calcul de son carr
 LAffichage du nombre et de son carr

 Les deux threads ntaient pas coordonnes


 On pouvait incrmenter plusieurs fois le nombre
avant de lafficher.
 Dans cet exemple, nous allons les coordonner grce
wait et notifyAll.

Java - Dr A. Belangour

417

205

Exemple 2 (1/5)
class Nombres
{ private int n=1, carre ;
private boolean pret = false ;
/* les mthodes calcul et affiche sont mutuellement exclusives */
public synchronized void calcul() throws InterruptedException{
if (!pret) { n++ ;
carre = n*n ;
pret = true ;
notifyAll() ;
}
else wait() ;
}

Java - Dr A. Belangour

418

Exemple 2 (2/5)
public synchronized void affiche () {
try {
if (pret) {
System.out.println (n + " a pour carre " + carre) ;
notifyAll() ;
pret = false ;
}
else wait () ;
}
catch (InterruptedException e) {}
}
public boolean pret () {
return pret ;
}
Java - Dr A. Belangour

419

206

Exemple 2 (3/5)
class ThrChange extends Thread {
private Nombres nomb ;
public ThrChange (Nombres nomb) {
this.nomb = nomb ;
}
public void run () {
try {
while (!interrupted()) {
nomb.calcul() ;
sleep (5) ;
}
}
catch (InterruptedException e) {}
}
}
Java - Dr A. Belangour

420

Exemple 2 (4/5)
class ThrAff extends Thread{
private Nombres nomb ;
public ThrAff (Nombres nomb) {
this.nomb = nomb ;
}
public void run () {
try{
while (!interrupted()) {
nomb.affiche() ;
sleep (2) ;
}
}
catch (InterruptedException e) {}
}
}
Java - Dr A. Belangour

421

207

Exemple 2 (5/5)
Import java.util.Scanner;
public class Synchr4
{ public static void main (String args[]) {
Scanner s=new Scanner(System.in);
Nombres nomb = new Nombres() ;
Thread calc = new ThrChange (nomb) ;
Thread aff = new ThrAff (nomb) ;
System.out.println ("Suite de carres - tapez retour pour
arreter") ;
calc.start() ; aff.start() ;
S.next() ;
calc.interrupt() ; aff.interrupt() ;
}
}
Java - Dr A. Belangour

422

Les tats dun thread


 Aprs la cration dun thread, lappel la
mthode start() le met dun ltat prt .
 Lorsque lOS lui donne la main il passe ltat
en cours dexcution .
 Si lOS lui reprend la main, pour la donner
une autre thread, il repasse prt .
 Cette transition peut tre programme en
appelant la mthode yield() de la classe
Thread.
Java - Dr A. Belangour

423

208

Les tats dun thread


 Lappel sleep() le passe en sommeil
 Lorsque le temps de sommeil est coul il
repasse prt .
 Il peut tre mis dans une liste dattente
associe un objet (appel de wait()).
 Lappel de notifyAll(), le ramne prt .
 Il se trouve dans ltat bloqu quand il lance
une opration dentre-sortie et attend sa
terminaison.
 Finalement, il peut sachever.
Java - Dr A. Belangour

424

La priorit des threads


 Tout thread dispose dune priorit
 La mthode setPriority() permet de changer
cette priorit
 Par dfaut cette priorit est de 5 (constante
NORM.PRIORITY)
 Mais elle peut varier de 1 (MIN. PRIORITY)
10 (MAX.PRIORITY)

Java - Dr A. Belangour

425

209

La priorit des threads


 Lorsque plusieurs threads sont prts, lOS
choisit le thread qui la plus haute priorit.
 Si plusieurs threads ont la mme priorit, les
comportements diffrent dun OS un autre.
 Remarque :
 il est prfrable de jouer avec la mthode sleep()
plutt que de changer les priorits pour les
programmes multiplateformes.

Java - Dr A. Belangour

426

210

Vous aimerez peut-être aussi