Exemples de Programmation en Java
Exemples de Programmation en Java
Java
Karin DESMARETS 1
Table des matières
I. Présentation
II. Les types primitifs de Java
III. Les opérateurs
IV. Les instructions de contrôle
1) L'instruction "if"
2) L'instruction "switch"
3) L'instruction "do… while"
4) L'instruction "while"
5) L'instruction "for"
6) L'instruction "break"
2
V. Les fonctions
1) Fonctions qui ne renvoient pas de valeur
2) Fonctions qui renvoient un résultat
3
VII. Les tableaux
1) Déclaration
2) Déclaration avec initialisation
3) Utilisation
4) La taille d'un tableau
5) La classe Arrays
6) Passage des arguments
7) Les tableaux d'objets
8) L'outil Javadoc
4
VIII.L'héritage
1) Généralisation – Spécialisation
2) Héritage et constructeur
3) Les modificateurs de visibilité
4) Redéfinition et surcharge
5) Polymorphisme
6) Classes et méthodes finales
7) Classes abstraites
8) Interfaces
9) La classe Object
5
IX. Les chaînes de caractères
1) La classe String
• Déclaration
• Comparaison
• Concaténation
• Extraction de sous-chaîne
• Longueur
• Extraction d'un caractère
• Conversions
2) La classe StringBuffer
3) Exercices
6
X. Les exceptions standard
XI. Les exceptions non standard
XII. La classe ArrayList
XIII. Les interfaces graphiques
1) Fenêtre
2) Gestion de clic
3) Ajout de composant
4) Evénement sur les composants
5) Boîtes de dialogue
6) BorderLayout
7) Jpanel
8) Quelques composants graphiques
XIV. NetBeans
7
I. Présentation
Cours 1 8
Atouts de Java
• Langage de programmation simple ;
• Orienté objet ;
9
Neutralité architecturale
Un programme Java est compilé puis interprété.
10
Historique du langage
• 1991 : développement de OAK
11
• 1995 : intégration de la JVM dans Netscape
– OAK étant un nom déposé, le projet s’appellera
JAVA
– Apparition des Applets qui ont fait le succès de
Java (remplacés par Flash puis Javascript)
12
• Version actuelle : J2SE 8 et J2EE 7
13
• Pourquoi Java ?
14
Premier programme Java
public class PremProg
{
public static void main (String args[])
{
[Link]("Premier programme Java");
}
}
15
II. Les types primitifs de Java
16
Les types entiers
17
Les types flottants
18
Le type caractère
char 2 octets code universel Unicode
Le type booléen
boolean valeur logique true ou false
19
Initialisation des variables
• int n = 5 ;
• int n ; n = 5 ;
• int duo = 2 * n ;
• En Java, une variable doit être initialisée avant d'être
utilisée (sinon erreur de compilation).
20
Les constantes
• final int N = 20 ;
• final int N ;
N = [Link] () ; // Première affectation : OK
N = N + 1 ; // 2ème affectation : erreur de compilation
21
III. Les opérateurs
22
Opérateurs arithmétiques
+ addition
- soustraction
* multiplication
/ division
% modulo, reste de la division entière
23
Priorité des opérateurs (en ordre décroissant)
24
Opérateurs relationnels
< inférieur
<= inférieur ou égal
> supérieur
>= supérieur ou égal
== égal
!= différent
25
Opérateurs logiques
! négation
& et
^ ou exclusif
| ou inclusif
&& et avec court-circuit
|| ou inclusif avec court-circuit
26
Fonctionnement des opérateurs avec
court-circuit (&& et ||)
27
Opérateurs d'incrémentation
++ pré ou post-incrémentation
-- pré ou post-décrémentation
28
Exemples
a = ++ i ; // i=i+1; a=i;
a = i ++ ; // a=i; i=i+1;
tab[i++] = [Link]() ;
// garnit tab[i] puis incrémente i
i ++ ;
++ i ; // sont 2 instructions équivalentes…
29
Opérateurs d'affectation élargie
Exemples :
a=a+b; devient a += b ;
n=n*v; devient n *= v ;
30
Conversions entre différents types
31
Exemple
n * p + x (avec n int, p long et x float)
32
L'opérateur de CAST
n=a/b;
33
Pour forcer la conversion de l'expression en entier,
on utilise un opérateur nommé cast.
n = (int) (a / b) ;
n = (int) a / b ;
34
Remarque :
35
Exercice Instructions valides ?
int a = 1 , b = 2 ;
float f = 5.5f ;
double d = 8.4 ;
f=a+b;
a = b * 2.5 ;
a = (int) d + f ;
d=a*f;
f = a + (int) d ;
36
Exercice Instructions valides ?
int a = 1 , b = 2 ;
float f = 5.5f ;
double d = 8.4 ;
f=a+b; // oui
a = b * 2.5 ; // non (expression : double)
a = (int) d + f ; // non (expression : float)
d=a*f; // oui
f = a + (int) d ; // oui
37
IV. Les instructions de contrôle
1. L'instruction "if"
if (condition)
{ instr1 ; instr2 ; … }
else
{ instr3 ; instr4 ; … }
38
Références pour les logiciels
39
2. L'instruction "switch"
switch (expression)
{
case const-1 : instr1 ; instr2 ; … ; break ;
case const-2 : instr3 ; instr4 ; … ; break ;
…
default : instr5 ; instr6 ; … ;
}
Cours 2 40
Exemple 1
int categorie = [Link]( ) ;
switch (categorie)
{ case 1 : [Link] ("Junior") ;
break ;
case 2 : [Link] ("Adulte") ;
break ;
case 3 : [Link] ("Senior") ;
break ;
default : [Link] ("Non défini") ;
}
41
Exemple 2
switch (mois)
{ case 1 :
case 2 :
case 3:
case 4 :
case 5 :
case 6 : [Link] ("Premier semestre") ; break ;
case 7 :
case 8 : [Link] ("Vacances") ; break ;
default : [Link] ("Fin d'année") ;
}
42
3. L'instruction "do … while"
do
{
série d'instructions ;
}
while (condition) ;
43
Exemple : Que fait ce programme ?
int som = 0, nb ;
do
{
[Link]("Entrez un nombre") ;
nb = [Link]() ;
som += nb ;
}
while(nb != 0) ;
44
4. L'instruction "while"
while (condition)
{
série d'instructions ;
}
45
Exemple : Que fait ce programme ?
int nb ;
while ( nb > 0 )
{
[Link](nb) ;
nb-- ;
}
46
Erreur de compilation : Il faut initialiser nb avant
de l'utiliser…
Que se passe-t-il maintenant ?
int nb = 10 ;
while ( nb > 0 )
{
[Link](nb) ;
nb-- ;
}
47
5. L'instruction "for"
int i ;
for ( i = 1 ; i < 4 ; i++ )
[Link] ( "I vaut " + i) ;
[Link]( "I vaut " + i ) ;
49
Exemple 2 : Que fait ce programme ?
int i ;
for ( i = 6 ; i > 0 ; i = i-2 )
{
[Link] ( "I vaut " ) ;
[Link] ( i ) ;
}
50
Exercices
52
Solution
int i, som ;
for ( i=1, som=0 ; i <= 10 ; i++ )
{
int n = [Link]() ;
if ( n == 0) break ; // Ce break nous branche
som += n ;
}
[Link]( "Somme des " + (i-1) + " nb = " + som) ; // ici…
53
Consignes pour le laboratoire
54
Consignes pour le laboratoire
Dans l'onglet CLASSPATH, cliquez sur New et
mentionner le chemin du dossier de la classe Clavier.
55
V. Les fonctions
56
1) Fonctions qui ne renvoient pas de valeur
Déclaration
57
Exemple 1 :
Fonction qui affiche "Bienvenue au cours de Java"
Déclaration
private static void bienvenue( )
{
[Link]("Bienvenue au cours de Java") ;
}
58
Exemple 2 :
Fonction qui affiche "Tu as (n) ans" à partir d'une année de
naissance.
Déclaration
{
int age = 2017 - anaiss ;
[Link]("Tu as " + age + " ans") ;
}
public static void main (String args[])
{
afficheAge(1983) ; Appel
}
}
59
2) Fonctions qui renvoient un résultat
Déclaration
private static type nom-fonction ( liste d'arguments )
{
instructions ;
return … ;
}
Le résultat est soit stocké dans une
Appel
variable, soit affiché directement…
60
Exemple
61
VI. Les classes et les objets
Cours 3 62
a) Notion d'objet
63
b) L'encapsulation des données
Pour protéger les données d'un objet (ses attributs), il faut les
"enfermer" dans l'objet = l'encapsulation.
64
c) Notion de classe
Une classe décrit la manière donc va fonctionner un objet.
Elle va permettre de créer plusieurs objets.
Plusieurs objets 65
2. Les classes
Exemple :
Soit une classe Point, destinée à manipuler les points d'un plan.
66
Un objet de type Point sera représenté par 2
coordonnées entières : x et y.
6
x
67
Il disposera aussi des 3 méthodes suivantes :
Remarque :
Une méthode est une fonction qui fait partie d'une classe. Elle permet
d'effectuer des traitements sur (ou avec) les attributs d'un objet.
68
En notation UML, le diagramme de classe se
présente comme ceci :
Nom de la
classe
Point
- x : integer Attributs
- y : integer
+ void initialise (integer, integer)
+ void deplace (integer, integer) Méthodes
+ void affiche ( )
69
Code Java :
public class Point
{ private int x ; // attributs
private int y ;
public void initialise (int abs, int ord) // méthodes
{ x = abs ;
y = ord ; }
public void deplace (int dx, int dy)
{ x += dx ;
y += dy ; }
public void affiche ()
{ [Link] ("Mes coordonnées : "+ x +" "+ y) ; }
}
70
- Cette classe Point sert à instancier (= créer)
des objets de type Point et à leur appliquer à
volonté les méthodes disponibles ;
71
public class TstPoint
{ public static void main (String args[])
{ Point a ; // déclaration d'un point
a = new Point() ; // instanciation (=création)
[Link](3, 5) ;
[Link]() ;
[Link](2, 1) ;
[Link]() ;
Point b = new Point() ; // déclaration et instanciation
[Link](6, 8) ;
[Link]() ;
}
} 72
L'exécution de la classe TstPoint donne :
Mes coordonnées : 3 5
Mes coordonnées : 5 6
Mes coordonnées : 6 8
73
3. Attributs et variables locales
74
public class Point
{ private int x ;
private int y ;
public void initialise (int abs, int ord)
{ x = abs ;
y = ord ; } § Attributs
public void deplace (int dx, int dy) § Variables locales
{ x += dx ;
§ Arguments
y += dy ; }
public void affiche ()
{ String coord = "Coordonnées : "+ x + " " + y ;
[Link] (coord) ; }
}
75
§ Les attributs d'un objet sont initialisés par défaut :
76
4. Les constructeurs
77
Constructeur qui remplace la méthode 'initialise'
78
Changements dans la classe TstPoint
La commande devient :
79
Autre changement
On obtient donc :
80
public class TstPoint
{
public static void main (String args[])
{ Point a = new Point(3, 5) ;
// Commande qui fait appel au constructeur...
[Link]( ) ;
[Link](2, 1) ;
[Link]( ) ;
82
La création d'un objet ( = commande 'new' ) s'effectue en 3
phases :
83
Ce code contient une erreur, laquelle ?
84
Exercice
85
5. Accesseurs et modificateurs
Cours 4 86
Protection des attributs d'un objet
§ Autant que possible, les attributs doivent être déclarés 'private'.
§ Soit une classe 'Annee' qui contient un attribut 'an'.
§ Comment faire pour lire cet attribut 'private' de l'extérieur ?
e t An()
+ int g
87
§ Accesseur pour l'attribut 'an' :
88
§ Lecture de la valeur de l'attribut 'an' depuis une classe 'main' :
89
§ Comment faire pour modifier un attribut 'private' depuis une
autre classe ?
t)
in
n(
etA
s
oid
v
+
Solution : Créer une méthode 'public' qui va
modifier la valeur de l'attribut avec une valeur
- int an reçue en argument.
Ce type de méthode s'appelle un modificateur ou
setter.
Par convention son nom commence par 'set' suivi
du nom de l'attribut qu'on veut modifier, ici
setAn(…)
90
§ Le modificateur ou setter pourra en plus vérifier la validité de la
nouvelle valeur.
Exemple : N'accepter la nouvelle valeur pour l'attribut 'an' que
si elle est comprise de 1900 à 1999.
91
OU public class Annee
{
private int an;
92
Modification de la valeur de l'attribut 'an' depuis une classe 'main' :
93
6. Affectation et comparaison d'objets
94
Soit la classe Point qui possède un constructeur à 2 arguments.
Point a, b ;
a = new Point (3, 5) ;
b = new Point (2, 0) ;
On obtient en mémoire :
x 3
a y 5
x 2
b
y 0
95
§ On veut tester si ces points sont égaux :
if ( a == b ) …
ne convient pas car on teste les adresses-mémoire
des objets !
96
§ Si on exécute l'instruction :
a=b;
c'est la référence de a qui devient la référence de b
On obtient en mémoire : x 3
X
y 5
a
x 2
y 0
b
le GARBAGE COLLECTOR
98
§ Le garbage collector est une tâche de la
JVM qui :
– travaille en arrière-plan ;
– libère la place occupée par les instances non
référencées ;
– compacte la mémoire occupée ;
Il intervient :
- quand le système a besoin de mémoire;
- ou, de temps en temps avec une priorité faible ;
99
7. Variables et méthodes de classe
100
public class Point public class TestPoint
{ {
private int x, y ;
public static void main(String args[])
public Point( ) {
{ Point p1 = new Point( ) ;
x=0; Point p2 = new Point( ) ;
y=0; }
} }
}
On obtient en mémoire :
x 0
p1
y 0
x et y existent dans
chaque instance
=
x 0
Variables d'instances
p2
y 0
101
§ Java permet de définir des variables de classe,
elles n'existeront qu'en un seul exemplaire, quel
que soit le nombre d'objets instances de la classe ;
102
public class Point
{
private static int nb = 0 ;
private int x, y ;
public Point()
{
nb++ ;
[Link] ("Il y a " + nb + " point(s)") ;
}
}
public class TstPoint
{
public static void main (String args[ ])
{ Point a = new Point( ) ;
Point b = new Point( ) ;
Point c = new Point( ) ;
}
} Qu'affiche ce programme ?
103
b) De manière analogue, certaines méthodes
peuvent avoir un rôle indépendant d'un
quelconque objet ;
104
public class Point
{
private static int nb = 0 ;
public Point( )
{
nb++ ;
}
// Méthode de classe : statique
public static int getNb ( )
{
return nb ;
}
}
105
public class TstPoint
{
public static void main (String args[])
{ Point a = new Point() ;
Point b = new Point() ;
Point c = new Point() ;
[Link] ("Nbre d'objets = " + [Link]( ) ) ;
[Link]
ou
NomDeClasse.méthodeDeClasse( )
107
En notation UML, le diagramme de la classe
Point se présente comme suit :
Point
- $ int nb = 0
+ Point ( )
+ $ int getNb( )
108
- Vous avez déjà, au cours des labos
précédents, manipulé des variables et des
méthodes statiques sans vous en rendre
compte…
109
Exercices
• couleur
• vitesse maximale
• nombre de vitesses
• âge
• prix catalogue
110
Corriger le code suivant :
public class Essai
{ private String nom ;
public Essai (String nom)
{ nom = [Link] ; }
public static int getNom()
{ return nom ;
}
}
public class TestEssai
{ public static void main (String args[])
{ Essai a = new Essai("Test 1") ;
}
}
111
8. La surcharge
Cours 5 112
Exemple 1 : Surcharge de constructeur de la classe Point.
public class Point
{ private int x, y ;
public Point (int abs, int ord) // Constructeur
{ x = abs ;
y = ord ;
}
public Point () // Surcharge du constructeur
{ x=0;
y=0;
}
}
113
Lors de l'instanciation :
114
Exemple 2 : Surcharge de la méthode "deplace" de
la classe Point.
115
Lors de l'exécution :
// Appelle deplace(int)…
[Link](2, 2) ;
116
Nous avons déjà rencontré la surcharge dans
la classe Math…
[Link]
117
9. Les packages
118
§ Quand un programme fait référence à une classe, le
compilateur la recherche :
119
§ Pour utiliser une classe appartenant à un autre
package, il faut ajouter une instruction 'import' :
import [Link] ;
ou
import nomPackage.* ;
Exemple :
import [Link] ; ou import [Link].* ;
public class TestArrayList
{
public static void main(String args[])
{ ArrayList a = new ArrayList() ; …
}
}
120
§ En important tout un package dont certaines classes
sont inutilisées, on ne se pénalise ni en temps de
compilation, ni en taille des byte-codes ;
import [Link] ;
import [Link].* ;
121
§ L'environnement Java définit une API (Application
Programmer's Interface) très riche au travers de
nombreux packages ;
122
VII. Les tableaux
123
1. Déclaration
124
On crée un tableau comme on crée un objet : avec
l'opérateur "new"…
• int tab[] ;
tab = new int [4] ; /* référence à un
tableau de 4 entiers… */
125
2. Déclaration avec initialisation
126
Il y existe une autre façon de procéder :
127
3. Utilisation d'un tableau
• int i = 3 ;
[Link] (tab[i]) ; // affiche le 4ème élément
128
4. La taille d'un tableau
La variable 'length' retourne le nombre d'éléments d'un tableau ;
129
5. Manipulation de tableaux : la classe Arrays
La classe Arrays propose différentes méthodes qui permettent
manipuler aisément les tableaux.
Exemple : on a 2 tableaux d’entiers et on voudrait vérifier s’ils ont
des contenus identiques. La méthode equals permet de le faire…
130
import [Link].* ;
//car la classe Arrays appartient au package [Link]
if([Link](t1, t2))
{
[Link]("Tableaux identiques") ;
}
}
}
131
Remarques sur le passage des arguments
a) Lorsqu'on transmet une variable de type primitif en argument, on
envoie en fait une copie de la valeur de la variable (=passage par
valeur) :
public class TransmPrimitif
{ public static void main(String[] args)
{ int i = 5 ;
modifVariable(i) ;
[Link]("Après la procédure : " + i) ;
}
static void modifVariable(int k)
{ [Link]("Avant la modif : " + k) ;
k = 10 ;
[Link]("Après la modif : " + k) ;
}
}
Cours 6 132
L’affichage donnera :
Après la procédure : 5
(la variable d’origine n’a pas bougé)
133
b) Lorsqu'on transmet un tableau en argument, on envoie
la référence du tableau (= son adresse), la méthode agit
alors directement sur le tableau concerné et non sur une
copie (=passage par référence) …
135
Quelles sont les erreurs commises ici ?
137
Exemple
On a donc 6 références…
138
L'outil Javadoc
139
L'outil Javadoc
140
L'outil Javadoc
141
Exemple : la classe Personne du dernier cours…
Démonstration…
144
VIII. L'héritage
Cours 7 145
1) Généralisation - spécialisation
• Le mot-clé extends indique la classe-mère :
146
Que peut faire une sous-classe ?
147
Exemple : la classe Point
- Imaginons que nous ayons
class Point besoin d'une classe
{ Pointcol, destinée à
private int x, y ; manipuler des points
colorés d'un plan ;
public void initialise (int a, int b)
{ x=a;y=b; } - Elle disposera des mêmes
fonctionnalités que Point et
public void deplace (int dx, int dy)
une méthode "colore"
{ x += dx ; y += dy ; } chargée de définir la couleur
public void affiche () ;
{ [Link] ("Je suis en " + x
+ " " + y) ; } - Elle héritera donc de Point ;
}
148
Exemple : la classe Point
{ {
private int x, y ;
private byte couleur ;
public void initialise (int a, int b) public void colore (byte
{ x=a;y=b; } couleur)
{
public void deplace (int dx, int dy)
{ x += dx ; y += dy ; }
[Link] = couleur ;
}
public void affiche () }
{ [Link] ("Je suis en " + x
+ " " + y) ; }
}
149
Nous pouvons maintenant déclarer des variables de type Pointcol :
{
[Link] ("Je suis en " + x + " " + y) ;
[Link] ("Ma couleur est " + couleur) ;
}
151
§ En effet, les attributs x et y sont encapsulés dans la super
classe et donc non accessibles dans la sous-classe.
152
Exercices
1) On dispose d’une classe :
class Point
{ public void initialise (int x, int y)
{ this.x = x ; this.y = y ; }
public void deplace (int dx, int dy) { x += dx ; y += dy ; }
public int getX() { return x ; }
public int getY() { return y ; }
private int x, y ;
}
153
2) On dispose de la classe :
class Point
{ public void setPoint (int x, int y) { this.x = x ; this.y = y ; }
public void deplace (int dx, int dy) { x += dx ; y += dy ; }
public void affCoord ()
{ [Link] ("Coordonnees : " + x + " " + y) ; }
private int x, y ;
}
Ecrire la classe PointNom, dérivée de Point permettant d'ajouter
un attribut 'nom' de type char. On y ajoute les méthodes :
§ setPointNom pour réinitialiser les coordonnées et le nom
d'un objet de type PointNom ;
§ affCoordNom pour afficher les coordonnées et le nom d'un
objet de type PointNom ;
154
2) Héritage et constructeurs
155
Exemple
class Mere
{ public Mere()
{ [Link] ("Constructeur mère") ; }
}
class Fille extends Mere
{
public Fille() // Pas d'appel explicite : appel par défaut
{ [Link] ("Constructeur fille") ; }
}
public class TestFille
{
public static void main (String args[])
{ Fille a = new Fille() ; }
}
156
• Si un constructeur d'une classe dérivée appelle un
constructeur de sa classe de base, il doit
obligatoirement s'agir de la première instruction
du constructeur et ce dernier est désigné par le
mot-clé super ;
157
Exemple 1
class Mere
{ private String prenom ;
public Mere(String prenom)
{ [Link] = prenom ; }
}
class Fille extends Mere
{
public Fille(String nom)
{ super (nom) ; // Appel explicite du constructeur…
[Link] ("Constructeur fille") ; }
}
public class TestFille
{
public static void main (String args[])
{ Fille a = new Fille("Céline") ; }
}
158
Exemple 2
class Point
{
public Point (int x, int y) { this.x = x ; this.y = y ; }
public void affCoord()
{ [Link] ("Coordonnees : " + x + " " + y) ; }
private int x, y ;
}
159
Solution
class PointNom extends Point
{
public PointNom (int x, int y, char nom)
{
super (x, y) ;
[Link] = nom ;
}
public void affCoordNom()
{
[Link] ("Point de nom " + nom + " ") ;
affCoord() ;
}
private char nom ;
}
160
3) Modificateurs de visibilité
• Rappel
161
• Un attribut ou une méthode possèdent 4 degrés de
visibilité :
162
4) Redéfinition et surcharge
163
public class A
{ public void methodeX(int i)
{ … }
}
Surcharge
B possède 2 méthodes
164
• Redéfinition = possibilité de redéfinir dans une
sous-classe une méthode qui existe déjà dans la
super-classe (même signature) ;
165
public class A
{ public void methodeX(int i)
{ … }
}
Surcharge Redéfinition
166
Exemple
• class Employe { … }
• class Representant extends Employe { … }
167
class Employe class Representant extends Employe
{ {
private String nom ; private float chAff ;
protected float salaire ;
public Representant ( String nom,
public Employe (String nom, float salaire,
float salaire) float chAff )
{
{ super (nom, salaire) ;
[Link] = nom ; [Link] = chAff ;
[Link] = salaire ; }
}
public float calculSalaire () { // Redéfinition de la méthode calculSalaire
float sal = salaire * 0.85f ; public float calculSalaire ()
{
return sal ;
return salaire * 0.85f + (chAff * 0.1f) ;
}
}
}
}
168
Pour tester les 2 classes précédentes :
169
5) Polymorphisme
Cours 8 170
Exemple :
int type ;
float salaire ;
Employe e ;
[Link] ("Type ? (1:Employe - 2:Representant) ") ;
type = [Link]() ;
if (type == 1)
{ e = new Employe("Dupond", 1000) ;
}
else
{ e = new Representant("Dupond",1000, 3000) ;
}
[Link] ("Salaire : " + [Link]() + " euros") ;
POLYMORPHISME
171
A l'exécution du programme, le code de la méthode calculSalaire
à lancer est déterminé suivant la classe de l'objet au moment de
l'instanciation (=new) !!!
172
Remarque
((Representant)e).methPropreRepr() ; // OK
173
A retenir
174
6) Classes et méthodes finales
175
7) Les classes abstraites
176
§ Intérêt ?
177
Exemple
abstract class Employe
{
public void engager( )
{ [Link]("Pot d’accueil");
}
public abstract void licencier( ) ; // pas d'instruction, juste ' ; '
}
class Ouvrier extends Employe
{
public void licencier()
{ [Link]("Dehors !") ; }
}
class Patron extends Employe
{
public void licencier()
{ [Link]("Vous comprendrez que dans la conjoncture actuelle ... ") ;
}
}
178
8) Les interfaces
179
§ La notion d'interface est cependant plus riche qu'un cas
particulier de classe abstraite :
180
Définition d'une interface
181
Implémentation d'une interface
182
Implémentation d'une interface
183
9) La classe Object
184
• toString() : renvoie une description de l'objet
sous forme de chaîne (type & adresse –
exemple : Point@fd7a8b04)
185
IX. Les chaînes de caractères
186
1. La classe String
• Déclaration :
ou
187
• Comparaison :
188
• Pour vérifier l'égalité entre 2 chaînes :
if (pré[Link](autrePrénom))
[Link] ("Prénoms identiques") ;
else
[Link] ("Prénoms différents") ;
189
• Remarque :
< <=
> >=
pour comparer des
chaînes de caractères :
Erreur
de compilation…
190
• La méthode "compareTo( )" renvoie
• 0 si les 2 chaînes sont égales ;
• Une valeur strictement négative si la 1ère est inférieure à la 2ème ;
• Une valeur strictement positive si la 1ère est supérieure à la 2ème ;
if ([Link](autreNom) == 0)
{ [Link]("Noms identiques");
}
else
{ if([Link](autreNom) < 0)
{ [Link](nom + " inférieur à " + autreNom) ;
}
else
{ [Link] (nom + " supérieur à " + autreNom) ;
191
• Concaténation :
ou
192
• Un objet de type String ne peut être modifié…
• Si on écrit :
String msg = "Bonjour" ;
msg = "Nouveau message" ;
193
• Extraction de sous-chaîne :
String msg = "Bienvenue ici" ;
194
• Longueur d'une chaîne :
String msg = "Bienvenue" ;
lettre = [Link](3) ;
195
• Méthodes de conversions :
196
• Rappel :
197
2. La classe StringBuffer
198
2. La classe StringBuffer
• append . capacity
• charAt . delete
• insert . length
• replace . reverse
• setCharAt . substring
199
• Déclaration :
• StringBuffer a = new StringBuffer () ;
200
• Utilisation :
StringBuffer strBuff = new StringBuffer () ;
[Link] ("Cours") ;
[Link] (" de Java") ;
[Link] (9, "HTML et ") ;
201
– capacity() : retourne le nombre de caractères qu'un
StringBuffer peut recevoir ;
202
Exercices
1) Programme qui lit une chaîne au clavier et qui en affiche :
1) un caractère sur 2 (le premier étant affiché) ;
2) le premier et le dernier caractère ;
203
X. Les exceptions standard
Cours 9 204
Exemple
{ int t[] ;
[Link] ("Taille ? ") ;
int n = [Link]() ;
t = new int[n] ;
…
}
}
205
• Si l’utilisateur entre une taille de tableau négative,
le programme s'interrompt. Pourquoi ?
206
Principe de gestion des exceptions
207
try
{ … // Code susceptible de lever une exception…
}
catch (TypeErreur obj)
{ … // Traitement de l'exception…
}
… suite du programme…
208
Dans notre exemple, il s'agit d'un objet de la classe
NegativeArraySizeException, donc le code devient :
int t[ ] ;
try
{ [Link] ("Taille ? ") ;
int n = [Link]() ;
t = new int[n] ;
}
catch (NegativeArraySizeException e)
{
[Link](" Taille doit être positive !!!");
}
[Link]("Suite du programme") ;
209
Exercice
210
Remarque
211
XI. Les exceptions non standard
212
Commençons par écrire la classe du nouveau type d'exception :
213
public class Eleve
{
private String nom ;
private int note ; On indique que la
méthode est susceptible
public Eleve(String nom) de lever une exception
{ (throws)
[Link] = nom ;
}
public void encodeNote(int note) throws NoteInvalideException
{
if(note<0 || note>20)
throw new NoteInvalideException(note) ;
else
[Link] = note ;
On lance l'objet exception
} (throw) si la note est incorrecte
}
214
public class TestEleve
{
public static void main(String args[])
{
Eleve moi = new Eleve("Tom") ;
try L'instruction susceptible de
{ déclencher l'erreur est incorporée
[Link](23) ; dans un bloc try… catch( )
}
catch(NoteInvalideException erreur)
{
// on pourrait ici mettre une boucle qui demande d'entrer une note jusqu'à
// ce qu'elle soit comprise de 0 à 20 et l'affecter à l'attribut correspondant
}
… suite du programme …
}
}
215
XII. La classe ArrayList
• Déclaration :
ArrayList<Personne> lesPersonnes = new ArrayList<Personne>() ;
216
Quelques méthodes de la classe ArrayList :
217
• Pas besoin de spécifier de taille, un objet
ArrayList est dynamique (il peut s’agrandir à
volonté en fonction des besoins).
• Exemple :
218
import [Link];
public class TestArrayList
{ public static void main(String[] args)
{
ArrayList<String> al = new ArrayList<String>();
[Link]("Paul");
[Link]("Virginie");
[Link]("Louis") ;
for(int i = 0; i < [Link](); i++)
{ [Link]("Elt " + i + " = " + [Link](i));
}
}
}
219
• isEmpty() : renvoie true si l'objet est vide
• clear() : efface tout le contenu de l'objet
• contains(Object element) : retourne true si
l'élément passé en paramètre fait partie de
l'objet
• etc…
220
On peut parcourir un ArrayList avec une boucle for
classique :
221
Autre méthode plus simple :
222
XIII. Interface graphique
Cours 10 223
• On parle de programmation événementielle :
le code à exécuter est déterminé en fonction
de l'événement déclenché par l'utilisateur.
224
1. Première fenêtre
225
import [Link].* ;
{
setTitle("Labo JAVA") ; // Titre de la fenêtre...
setSize(400,300) ; // Taille...
setVisible(true) ; // Rend la fenêtre visible...
}
}
226
2. Gestion d'un clic
227
• Pour traiter un clic dans la fenêtre, il suffit
d'associer un objet de ce type à notre fenêtre ;
• Forme de l'instruction :
addMouseListener (objetEcouteur) ;
228
class MaFenetre extends JFrame implements MouseListener
{
public MaFenetre() // Constructeur
{
setTitle ("Gestion de clic") ;
setBounds (300, 300, 250, 200) ; // Position + taille
setVisible (true) ;
addMouseListener (this) ; /* La fenêtre sera son propre
écouteur d'événement souris */
}
public void mouseClicked (MouseEvent ev)
{ [Link] ("Clic dans la fenetre") ; }
public void mousePressed (MouseEvent ev) {}
public void mouseReleased (MouseEvent ev) {}
public void mouseEntered (MouseEvent ev) {}
public void mouseExited (MouseEvent ev) {}
}
229
N'oublions pas les imports :
Exemple de main
230
• L'argument transmis à la méthode mouseClicked
est un objet de type MouseEvent (objet automa-
tiquement créé par Java lors du clic et transmis à
l'écouteur voulu) ...
231
3. Ajout d'un composant
232
// Fenêtre avec un bouton
import [Link].* ; // Pour JFrame et JButton
import [Link].* ; // Pour Container
class Fenetre1bouton extends JFrame
{
public Fenetre1bouton(String titre)
{
setTitle(titre) ;
setBounds(300,300,600,200) ;
// Instanciation d'un objet JButton :
JButton monBouton1 = new JButton("Bouton 1") ;
// Référence vers le Container de la fenêtre :
Container cont = [Link]( ) ;
// Ajout du bouton au Container obtenu...
[Link](monBouton1) ;
setVisible(true) ;
}
}
233
• Contrairement à une fenêtre, un bouton est visible
par défaut ;
234
• Gestionnaire + intéressant : le FlowLayout qui
dispose les composants au fur et à mesure de gauche
à droite.
235
Fenêtre avec un bouton et un gestionnaire de mise-en-forme
ActionListener
237
import [Link].* ; import [Link].* ; import [Link].* ;
class Fen1Bouton extends JFrame implements ActionListener
{
public Fen1Bouton()
{
setTitle("Un bouton avec événement clavier ou souris") ;
setSize(700,100) ;
Container c = [Link]() ;
[Link](new FlowLayout()) ;
JButton monBouton = new JButton("Essai") ;
[Link](monBouton);
[Link](this) ; // La fenêtre écoute monBouton
setVisible(true) ;
}
public void actionPerformed(ActionEvent e)
{
[Link]("Clic ou action clavier sur le bouton") ;
}
}
238
b) Fenêtre avec 2 boutons - action identique…
class Fen2Boutons extends JFrame implements ActionListener
{ public Fen2Boutons()
{
setTitle ("Avec 2 boutons") ;
setSize (400, 200) ;
JButton b1 = new JButton ("Bouton A") ;
JButton b2 = new JButton ("Bouton B") ;
Container contenu = getContentPane() ;
[Link] (new FlowLayout()) ;
[Link](b1) ;
[Link](b2) ;
[Link](this) ; // La fenêtre écoute le bouton 1
[Link](this) ; // La fenêtre écoute le bouton 2
setVisible(true);
}
// Gestion commune des 2 boutons !!!
public void actionPerformed (ActionEvent ev)
{ [Link] ("Action sur un des boutons") ;
}
} 239
c) Fenêtre avec 2 boutons - actions différentes
class Fen2Boutons extends JFrame implements ActionListener
{
private JButton b1, b2 ; // Déclaration globale (attributs)
public Fen2Boutons()
{ setTitle ("Avec 2 boutons") ; setSize (400, 200) ;
b1 = new JButton ("Bouton A") ;
b2 = new JButton ("Bouton B") ;
Container contenu = getContentPane() ;
[Link] (new FlowLayout()) ;
[Link](b1) ; [Link](b2) ;
[Link](this) ; [Link](this) ;
setVisible(true) ;
}
public void actionPerformed (ActionEvent ev)
// Test du composant qui est source de l’événement action
{ if([Link]() == b1)
[Link] ("Action sur le 1er bouton") ;
else
[Link] ("Action sur le 2ème bouton") ;
}
}
240
5. Les boîtes de dialogue
a) Boîtes de message
241
Exemple 1 : Pour afficher la boîte de message suivante :
[Link](fen, "Hello") ;
(avec fen qui est un objet de type JFrame ou dérivé)
242
Exemple 2 : Pour choisir le titre et l'icône :
243
b) Boîtes de confirmation
244
Exemple 1
245
Exemple 2 : Pour choisir le titre et les boutons…
246
c) Boîtes de saisie
247
Exemple 1
248
Exemple 2 : Pour choisir le titre et l'icône…
249
d) Boîtes d'option
250
Exemple
252
import [Link].* ;
import [Link].* ;
class Fenetre extends JFrame
{ public Fenetre()
{ setTitle("Test Border Layout") ;
setSize(500,300) ;
Container c = getContentPane() ;
[Link](new BorderLayout()); // Layout choisi par défaut (facultatif)
[Link](new JButton("Centre")) ; // Par défaut, ajout au centre
[Link](new JButton("Nord"), [Link]) ;
[Link](new JButton("Sud"), [Link]) ;
[Link](new JButton("Est"), [Link]) ;
[Link](new JButton("Ouest"), [Link]) ;
setVisible(true) ;
}
}
public class TestBorderLayout
{ public static void main(String args[])
{ Fenetre f = new Fenetre() ;
}
} 253
7. Création d'un panneau (JPanel)
254
Un panneau est une sous-fenêtre sans titre ni bordure.
Il ne peut exister de façon autonome, il doit être associé
par la méthode add à un autre conteneur (généralement
une fenêtre)…
255
8.1 Cases à cocher (JCheckBox)
Cours 12 256
Remarque : chaque action sur une case à cocher génère un
événement Action…
257
Exemple
258
8.2 Boutons radio (JRadioButton)
259
Désactivation automatique : créer un objet de type
ButtonGroup…
[Link](bRouge) ;
[Link](bVert) ;
260
Nb : Une action sur un bouton radio génère un
événement Action et un événement Item pour le
bouton actionné ;
Changement d'état :
[Link](true) ;
261
Exemple
262
8.3 Etiquettes (JLabel)
263
8.4 Champ de texte (JTextField)
264
Lecture du contenu
String ch = [Link]() ;
[Link](false) ;
265