Académique Documents
Professionnel Documents
Culture Documents
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
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
Java - Dr A. Belangour
10
Java - Dr A. Belangour
11
Java - Dr A. Belangour
12
Java - Dr A. Belangour
13
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 :
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
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
1.
2.
3.
Java - Dr A. Belangour
26
13
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>
Java - Dr A. Belangour
27
Chapitre 2
lments de base du langage Java
14
char
code
=
'D';
Remarque :
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
Java - Dr A. Belangour
32
16
Java - Dr A. Belangour
33
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
Type
Dsignation
Longueur
Valeurs
int
entier sign
32 bits
-2147483648 2147483647
float
32 bits
1.401e-045 3.40282e+038
double
64 bits
2.22507e-308 1.79769e+308
long
entier long
64 bits
-9223372036854775808
9223372036854775807
Java - Dr A. Belangour
35
36
18
Java - Dr A. Belangour
37
Java - Dr A. Belangour
38
19
Rsultat :
index = 3
Java - Dr A. Belangour
39
40
20
Java - Dr A. Belangour
41
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
| (OU binaire)
<=(infrieur ou gal )
?: (oprateur conditionnel)
== (egalit)
!= (diffrent de )
|| (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
44
22
+ (addition)
- (soustraction)
* (multiplication)
/ (division)
% (reste de la division)
L'arithmtique entire
45
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
Java - Dr A. Belangour
47
Remarque :
Java - Dr A. Belangour
48
24
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
Float.NaN ou Double.NaN
Float.POSITIVE_INFINITY ou Double.POSITIVE_INFINITY
Float.NEGATIVE_INFINITY ou Double.NEGATIVE_INFINITY
Java - Dr A. Belangour
50
25
Tableau rcapitulatif
X/Y
X%Y
valeur finie
NaN
valeur finie
+/-
NaN
NaN
+/-
valeur finie
+/-
NaN
lexcution.
+/-
+/-
NaN
NaN
51
Java - Dr A. Belangour
52
26
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
n1=0 n2=0
n1=n2++;
n1=0 n2=1
n1=++n2;
n1=2 n2=2
n1=n1++;
Java - Dr A. Belangour
54
27
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
Remarque :
Java - Dr A. Belangour
56
28
Java - Dr A. Belangour
57
Java - Dr A. Belangour
58
29
Boucle DO..WHILE:
do {
...
} while ( condition)
while ( condition) {
...
}
59
Exemple :
for (int i =0; i<10; i++) {
System.out.println("bonjour");
}
Java - Dr A. Belangour
60
30
Java - Dr A. Belangour
61
Java - Dr A. Belangour
62
31
Java - Dr A. Belangour
63
Loprateur ternaire:
Forme :
Forme :
if (boolean) { ... }
else if (boolean) { ... }
else { ... }
Exemple :
if (moyenne>10)
passe= true
else
passe = false
( condition ) ? valeur-vrai
: valeur-faux
Java - Dr A. Belangour
passe= (moyenne>10) ?
true : false;
64
32
Forme :
switch (expression)
{ case constante1 : instr11; instr12; break;
case constante2 : ...
default : ...
}
Java - Dr A. Belangour
65
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:
Ainsi :
Java - Dr A. Belangour
68
34
Les tableaux
la dclaration prcdente peut tre indiffremment
dclare avec dautres faons comme suit :
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 :
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.
Java - Dr A. Belangour
72
36
Les tableaux
Remarques :
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]);
Java - Dr A. Belangour
74
37
Les tableaux
Une mthode peut avoir un paramtre de type tableau
Remarques :
Java - Dr A. Belangour
75
Java - Dr A. Belangour
76
38
77
int entier = 5;
float flottant = (float) entier;
Java - Dr A. Belangour
78
39
Java - Dr A. Belangour
79
Remarque :
valueOf est galement dfinie pour des
arguments de type boolean, long, float,
double et char
Java - Dr A. Belangour
80
40
Java - Dr A. Belangour
81
Java - Dr A. Belangour
82
41
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
Java - Dr A. Belangour
84
42
Exemple :
Remarques:
Java - Dr A. Belangour
85
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
Java - Dr A. Belangour
87
Java - Dr A. Belangour
88
44
Exemple :
Exemple :
Java - Dr A. Belangour
89
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.
Java - Dr A. Belangour
100
50
Classe : Utilisation
Pour crer un objet, il faut :
Remarque :
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
Par recopie :
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
Java - Dr A. Belangour
109
Remarque 2:
110
55
Java - Dr A. Belangour
111
Java - Dr A. Belangour
112
56
Exemple :
public class MaClasse {
final double pi=3.14 ;
}
Java - Dr A. Belangour
113
Java - Dr A. Belangour
114
57
Java - Dr A. Belangour
115
Java - Dr A. Belangour
116
58
117
la
le
la
le
la
le
marque
nombre
marque
nombre
marque
nombre
de
de
de
de
de
de
Java - Dr A. Belangour
118
59
Java - Dr A. Belangour
119
Java - Dr A. Belangour
120
60
Java - Dr A. Belangour
121
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
Java - Dr A. Belangour
123
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)
}
Java - Dr A. Belangour
124
62
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
Remarque :
Java - Dr A. Belangour
126
63
Java - Dr A. Belangour
127
Rsultat:
C:\>javac MonApp2.java
C:\>java MonApp2 Exception in thread "main"
java.lang.NoSuchMethodError: main
Java - Dr A. Belangour
128
64
Java - Dr A. Belangour
129
Java - Dr A. Belangour
130
65
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
134
67
Exemple:
class Affiche{
public float convertir (int i){
return((float) i);
}
public double convertir (int i){
return((double) i);
}
}
Java - Dr A. Belangour
135
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 p2;
p2=p1.clone();
138
69
Objets : comparaison
Remarque :
Deux objets avec des proprits identiques sont
deux objets distincts.
Java - Dr A. Belangour
139
Java - Dr A. Belangour
140
70
Java - Dr A. Belangour
141
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.
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.
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 ?
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;
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;
}
}
}
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
}
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.
163
Les interfaces
Exemple :
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 :
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
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
Java - Dr A. Belangour
171
172
86
Attention :
173
Remarque :
174
87
Attention :
175
Remarque :
Le package java.lang est import implicitement par
le compilateur : import java.lang.*;
Java - Dr A. Belangour
176
88
Java - Dr A. Belangour
177
Attention :
Noubliez pas dimporter les diffrents packages
utiliss
Java - Dr A. Belangour
178
89
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
180
90
181
Java - Dr A. Belangour
182
91
Java - Dr A. Belangour
183
Java - Dr A. Belangour
184
92
Java - Dr A. Belangour
185
Remarque :
Ne pas oublier de retourner la ligne la fin du
fichier!
Java - Dr A. Belangour
186
93
Java - Dr A. Belangour
187
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 :
Mthodes :
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 :
193
La classe String
Pour simplifier le traitement des chanes de caractre:
Exemple :
public class TestChaines1 {
public static void main(String[] args) {
String chaine1 = "bonjour";
String chaine2 = "bonjour";
System.out.println("(chaine1 == chaine2) = " +
(chaine1 == chaine2) );
}
}
Rsultat :
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:
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
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 :
Java - Dr A. Belangour
197
Les Wrappers
2.
Exemple :
int i = ent.intValue();
Java - Dr A. Belangour
198
99
Les Wrappers
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
1.
NEGATIVE_INFINITY
2.
POSITIVE_INFINITY
3.
NaN
Remarques :
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 - 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 :
Java - Dr A. Belangour
205
206
103
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
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
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
etc.
210
105
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
Mercredi ");
Jeudi ");
Vendredi ");
Samedi ");
Dimanche ");
Java - Dr A. Belangour
212
106
La classe Vector
Reprsente un tableau volu.
Les mthodes principales sont les suivantes :
Java - Dr A. Belangour
213
La classe Vector
214
107
La classe Vector
Exemple :
Rsultat :
C:\$user\java>java test9
le vecteur contient 3 lments le 1er lment = chane
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 ");
216
108
La classe Hashtable
Pour lire dans la table, on utilise get(object) en
donnant la cl en paramtre.
Exemple :
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 :
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 :
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 :
Java - Dr A. Belangour
231
La classe Component
Java - Dr A. Belangour
232
116
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
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.
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 :
Java - Dr A. Belangour
237
Le conteneur Frame
Java - Dr A. Belangour
238
119
Le conteneur Frame
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)
le titre de la bote,
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
objet-Container.setLayout(objet-Layout) ;
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
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);
}
}
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
Java - Dr A. Belangour
253
Java - Dr A. Belangour
254
127
Java - Dr A. Belangour
255
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
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 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
Java - Dr A. Belangour
260
130
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 :
tf.setEchoChar('*');
Java - Dr A. Belangour
261
Java - Dr A. Belangour
262
131
String getSelectedText()
lecture de la portion de texte slectionne
Exemple :
String contenu = new String();
contenu = ta.getSelectedText( );
Java - Dr A. Belangour
263
int getColumns( ) :
dtermination du nombre de colonnes
Exemple :
int n = ta.getColumns( );
Java - Dr A. Belangour
264
132
void appendText(String) :
Ajouter le texte transmis au texte existant
Exemple :
ta.appendText(String text);
Java - Dr A. Belangour
265
Les listes
Les listes (classe List)
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 :
Java - Dr A. Belangour
267
Les listes
void clear() :
effacement complet du contenu de la liste
Exemple ( code Java 1.1 ) :
li.clear( );
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( ):
String getSelectedItem( ):
String[] getSelectedItems():
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
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
cb.setState( true );
boolean etat;
etat = cb.getState( );
Java - Dr A. Belangour
275
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);
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
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().
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).
String getLabel()
Renvoie le texte de l'lment
boolean isEnabled()
renvoie l'tat de l'lment (actif / inactif)
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
Java - Dr A. Belangour
301
Java - Dr A. Belangour
302
151
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);
}
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 */ }
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
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 :
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);
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 :
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 :
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) ;
}
Java - Dr A. Belangour
328
164
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:
}
Java - Dr A. Belangour
339
166
340
Java - Dr A. Belangour
341
167
Java - Dr A. Belangour
342
343
168
344
Java - Dr A. Belangour
345
169
Java - Dr A. Belangour
346
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
Java - Dr A. Belangour
350
Java - Dr A. Belangour
351
172
352
Java - Dr A. Belangour
353
173
Java - Dr A. Belangour
354
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
Throwable
Error
Exception
RunTimeException
IOException
Java - Dr A. Belangour
360
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
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
Java - Dr A. Belangour
363
178
Java - Dr A. Belangour
364
Java - Dr A. Belangour
365
179
Java - Dr A. Belangour
366
Java - Dr A. Belangour
367
180
Java - Dr A. Belangour
368
369
181
Java - Dr A. Belangour
370
Java - Dr A. Belangour
371
182
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
Java - Dr A. Belangour
375
184
temps
dexcution
Java - Dr A. Belangour
376
Remarques :
Java - Dr A. Belangour
377
185
Java - Dr A. Belangour
378
Java - Dr A. Belangour
379
186
Java - Dr A. Belangour
380
Java - Dr A. Belangour
381
187
Java - Dr A. Belangour
382
Java - Dr A. Belangour
383
188
Java - Dr A. Belangour
384
Java - Dr A. Belangour
385
189
386
Java - Dr A. Belangour
387
190
Java - Dr A. Belangour
388
Java - Dr A. Belangour
389
191
390
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
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.
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
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
423
208
424
Java - Dr A. Belangour
425
209
Java - Dr A. Belangour
426
210