Vous êtes sur la page 1sur 34

Esnard Aurlien cours de Java ENSERB informatique

Page 2 sur 34
Sommaire
Avertissement : Le prsent cours fait rfrence la version 1.2 de Java, aussi appel Java 2.
Sommaire _______________________________________________________________________________ 1
Sommaire _______________________________________________________________________________ 2
Chapitre 1 Les bases du langage Java _______________________________________________________ 5
Les donnes ___________________________________________________________________________ 5
Les primitives________________________________________________________________________ 5
Table des primitives _____________________________________________________________ 5
Portabilit _____________________________________________________________________ 5
Initialisation des primitives________________________________________________________ 5
Les valeurs littrales _____________________________________________________________ 6
Casting sur les primitives _________________________________________________________ 6
Les constantes________________________________________________________________________ 6
Les handles __________________________________________________________________________ 6
final __________________________________________________________________________ 6
Les chanes de caractres _______________________________________________________________ 6
Les tableaux _________________________________________________________________________ 7
Dclaration ____________________________________________________________________ 7
Initialisation ___________________________________________________________________ 7
Les vecteurs _________________________________________________________________________ 7
Les collections________________________________________________________________________ 7
Les itrareurs_________________________________________________________________________ 7
Les comparateurs _____________________________________________________________________ 7
Les oprateurs _________________________________________________________________________ 7
Description des principaux oprateurs _____________________________________________________ 8
Oprateur daffectation___________________________________________________________ 8
Oprateurs arithmtiques deux oprandes ___________________________________________ 8
Oprateurs un oprande_________________________________________________________ 8
Oprateurs relationnels___________________________________________________________ 8
Mthode equals _________________________________________________________________ 9
Oprateurs logiques______________________________________________________________ 9
Oprateurs darithmtique binaire___________________________________________________ 9
Loprateur trois oprandes ______________________________________________________ 9
Oprateurs de casting ___________________________________________________________ 10
new _______________________________________________________________________________ 10
instanceof __________________________________________________________________________ 10
Loprateur +pour String ______________________________________________________________ 10
Priorit des oprateurs_________________________________________________________________ 10
Les structures de contrle ______________________________________________________________ 10
Mots cls_____________________________________________________________________________ 11
static ________________________________________________________________________ 11
final _________________________________________________________________________ 11
synchronized __________________________________________________________________ 12
native________________________________________________________________________ 12
transient _____________________________________________________________________ 12
volatile_______________________________________________________________________ 12
abstract ______________________________________________________________________ 12
Chapitre 2 Concepts de base de la programmation oriente objet_________________________________ 13
Introduction__________________________________________________________________________ 13
Tout est objet ! ___________________________________________________________________ 13
Illustration des concepts de classe et dobjet________________________________________________ 13
Les classes ___________________________________________________________________________ 14
Esnard Aurlien cours de Java ENSERB informatique
Page 3 sur 34
Dfinition __________________________________________________________________________ 14
Les classes final _____________________________________________________________________ 15
Les classes internes___________________________________________________________________ 15
Plusieurs classes dans un mme fichier______________________________________________ 15
Les classes imbriques ou static ___________________________________________________ 16
Les classes membres____________________________________________________________ 17
Les classes locales______________________________________________________________ 17
Les classes anonymes ___________________________________________________________ 17
Les champs __________________________________________________________________________ 17
Dfinition __________________________________________________________________________ 17
Variables dinstances & Variables static __________________________________________________ 17
Les variables final ____________________________________________________________________ 17
Les mthodes _________________________________________________________________________ 18
Les retours__________________________________________________________________________ 18
Les mthodes dinstances ______________________________________________________________ 18
Les mthodes static___________________________________________________________________ 18
Les mthodes native __________________________________________________________________ 19
Les mthodes final ___________________________________________________________________ 19
Les constructeurs _____________________________________________________________________ 19
Les constructeurs : cration dobjets______________________________________________________ 19
Les constructeurs (constructor)____________________________________________________ 19
Exemple de constructeurs________________________________________________________ 20
Cration dobjets (object) ________________________________________________________ 20
Surcharger les constructeurs______________________________________________________ 20
Autorisation daccs aux constructeurs______________________________________________ 21
Initialisation des objets________________________________________________________________ 21
Les initialiseurs de variables dinstances et statiques___________________________________ 21
Les initialiseurs dinstances ______________________________________________________ 22
Les initialiseurs statiques ________________________________________________________ 22
Les variables final non initialises _________________________________________________ 23
Les finaliseurs_______________________________________________________________________ 23
La destruction des objets (garbage collector)_______________________________________________ 23
Le concept de lhritage ________________________________________________________________ 23
Hirarchie des classes_________________________________________________________________ 23
Extends ______________________________________________________________________ 23
Rfrence la classe parente______________________________________________________ 24
Redfinition des champs et des mthodes__________________________________________________ 24
Redfinition des mthodes _______________________________________________________ 24
La surchage_________________________________________________________________________ 25
Surcharger les mthodes_________________________________________________________ 25
Accessibilit ________________________________________________________________________ 25
public________________________________________________________________________ 25
protected_____________________________________________________________________ 25
Autorisation par dfaut __________________________________________________________ 25
private_______________________________________________________________________ 25
Les classes abstraites, les interfaces, le polymorphisme ______________________________________ 26
Le mot cl abstract ___________________________________________________________________ 26
Mthodes et classes abstraites_____________________________________________________ 26
Les interfaces _______________________________________________________________________ 27
Casting ____________________________________________________________________________ 27
Sur-casting ___________________________________________________________________ 27
Sous-casting __________________________________________________________________ 28
Polymorphisme______________________________________________________________________ 28
Utilisation du sur-casting ________________________________________________________ 28
Late-binding __________________________________________________________________ 28
Polymorphisme ________________________________________________________________ 29
Esnard Aurlien cours de Java ENSERB informatique
Page 4 sur 34
Chapitre 3 Spcificits du langage _________________________________________________________ 31
Les entres / sorties ____________________________________________________________________ 31
Package _____________________________________________________________________________ 31
Les packages________________________________________________________________________ 31
Les packages accessibles par dfaut ________________________________________________ 31
Linstruction package ___________________________________________________________ 31
Linstruction import ____________________________________________________________ 31
Le clonage ___________________________________________________________________________ 31
Les threads___________________________________________________________________________ 31
Programme principal : la mthode main __________________________________________________ 31
Les exceptions (exception) et les erreurs (error) _____________________________________________ 32
Deux types derreurs en J ava _____________________________________________________ 32
Principe______________________________________________________________________ 32
Attraper les exceptions __________________________________________________________ 32
Annexes _______________________________________________________________________________ 33
La machine virtuelle Java (JVM)_________________________________________________________ 33
Compilation __________________________________________________________________________ 33
Diagramme de classe UML ____________________________________________________________ 33
Reprsentation dune classe ____________________________________________________________ 33
visibilit______________________________________________________________________ 33
Relations de dpendances______________________________________________________________ 33
Gnralisation Relation dhritage________________________________________________ 34
Association Relation de contenance_______________________________________________ 34
Gnralisation particulire Implmentation dune interface ____________________________ 34
Autres relations de dpendance____________________________________________________ 34
Diagramme de squence UML _________________________________________________________ 34
Esnard Aurlien cours de Java ENSERB informatique
Page 5 sur 34
Chapitre 1 Les bases du langage Java
Les donnes
Les primitives
Les concepteurs de Java ont dot ce langage dune srie dlments particuliers appels primitives. Ces lments
ressemble des objets, mais ne sont pas des objets ! Ils sont crs de faon diffrente, et sont galement
manipuls en mmoire de faon diffrente. Cependant il peuvent tre envelopps dans des objets spcialement
conu cet effet, et appels enveloppeurs (wrappers).
Table des primitives
primitive tendue taille enveloppeur
char 0 65 535 16 bits Character
byte -128 +127 8 bits Byte
short -32 768 +32 767 16 bits Short
int - 2 147 483 648 +2 147 483 647 32 bits Integer
long de 2
63
+2
63
-1 64 bits Long
float de 1.4E-45 3.40282347E38 32 bits Float
double de 4.9E-324 1.7976931348623157E308 64 bits Double
boolean true ou false 1 bit Boolean
void 0 bit Void
prcision quelconque BigInteger
prcision quelconque BigDecimal
Les classes BigInteger et BigDecimal sont utiliss pour reprsenter respectivement des valeurs entires et
dcimales de prcision quelconque. Il nexiste pas de primitives quivalente. Le type char sert reprsenter les
caractres, conformment au standard UNICODE. Il est le seul type numrique non sign ! Remarquons que le
type boolean nest pas un type numrique.
Portabilit
A linverse de ce qui se passe avec les autres langages, la taille des primitives est toujours la mme en Java, et ce
quelque soit lenvironnement ou le type de la machine. On garantit ainsi la portabilit des programmes Java.
Initialisation des primitives
Les primitives doivent tre dclares et initialises avant dtre utilises. Une primitive non initialise produira
une erreur la compilation : Variable may not have been initialized .
Remarquons que les primitives, lorsquelles sont employe comme membre de classe, possde des valeurs par
dfaut. Il nest donc pas ncessaire de les initialiser !
primitive valeurpar
dfaut
Esnard Aurlien cours de Java ENSERB informatique
Page 6 sur 34
primitive valeurpar
dfaut
boolean false
char \u0000(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
Les valeurs littrales
primitive syntaxe
char x
int 5 (dcimal), 05 (octal), 0x5 (hexadcimal)
long 5L, 05L, 0x5L
float 5.5f ou 5f ou 5.5E5f
double 5.5 ou 5.5d ou 5.5E5d ou 5.5E5
boolean false ou true
Casting sur les primitives
Les constantes
Java ne comporte pas de constantes proprement parler. Il est cependant possible de simuler lutilisation de
constantes laide du mot cl final. Une variable dclare final ne peut plus tre modifie une fois quelle a t
initialise.
Lorsquun lment est dclar final, le compilateur est mme doptimiser le code compil afin damliorer sa
vitesse dexcution.
Remarquons que les variables dclares final peuvent tre initialises lors de lexcution et non seulement lors
de leur dclaration !
Les handles
dfinition
final
Lutilisation de final nest pas rserv aux primitives. Un handle dun objet peut parfaitement tre dclar final.
Cependant, la contrainte ne sapplique alors quau handle, qui ne peut plus voir son affectation modifie.
Lobjet, lui, reste modifiable.
Les chanes de caractres
En J ava, les chanes de caractres sont des objets. Ce sont des instances de la classe String. Depuis les premiers
langages de programmation, les chanes de caractres ont pos des problmes ! En effet, sil est facile de dfinir
diffrents types numriques de format fixe, les chanes de caractres ne peuvent pas tre reprsentes dans un
format fixe car leur longueur peut varier de 0 un nombre quelconque de caractres.
J ava utilise une approche particulire. Les chanes de caractres peuvent tre initialises une valeur
quelconque. Leur longueur est choisie en fonction de leur valeur dinitialisation. En revanche, leur contenu ne
Esnard Aurlien cours de Java ENSERB informatique
Page 7 sur 34
peut plus tre modifi. En effet, la longueur des chanes tant assure de ne jamais varier, leur utilisation est trs
efficace en termes de performances.
Par ailleurs, il faut noter que J ava dispose dune autre classe, appele StringBuffer, qui permet de grer des
chanes dynamiques. Remarquons quil est galement possible de traiter des instances de la classe String comme
des chanes dynamiques, sous certaines prcautions.
Chanes littrales
Les chanes de caractres existent aussi sous forme littrale. Il suffit de placer la chane entre guillemets comme
dans lexemple suivant :
" Bonj our maman ! "
Les chanes littrales peuvent contenir des caractres spciaux issues du type char :
caractres spciaux description
\b backspace
\f saut de page
\n saut de ligne
\r retour chariot
\t tabulation horizontale
\\ \
\
\" "
\012 caractre en code octal
\uxxxx caractre en code hxadcimal (unicode)
Les tableaux
Les tableaux J ava sont des structures pouvant contenir un nombre fixe dlments de mme nature. Il peut sagir
dobjet ou de primitives. Chaque lment est accessible grce un indice correspondant sa position dans le
tableau. Les tableaux de J ava sont des objets, mme lorsquils contiennent des primitives.
Dclaration
Initialisation
Les vecteurs
Les collections
Les itrareurs
Les comparateurs
Les oprateurs
Les oprateurs J ava sont voisins du C.
Esnard Aurlien cours de Java ENSERB informatique
Page 8 sur 34
Description des principaux oprateurs
Oprateur daffectation
symbole description arit exemple
= affectation 2 x = 2
= soustraction et affectation 2 x= 2 oprateur daffectation
+= addition et affectation 2 x += 2
On dispose du raccourci : x = y = z = 2.
Oprateurs arithmtiques deux oprandes
symbole description arit exemple
soustraction 2 y x
* multiplication 2 3 * x
/ division 2 4 / 2
oprateurs arithmtiques deux
oprandes
% modulo (reste de la division) 2 5 % 2
Il nexiste pas en Java doprateur dexponentiation. Pour effectuer une exponentiation, il convient dutiliser la
fonction pow(double a, double b) de la classe java.lang.Math.
La division des entiers fournit un rsultat tronqu et non arrondi.
Oprateurs un oprande
symbole description arit exemple
oppos 1 x
++ pr-incrmentation 1 ++x
++ post-incrmentation 1 x++
-- pr-dcrmentation 1 --x
oprateurs un oprande
-- post-dcrmentation 1 x--
Oprateurs relationnels
symbole description arit exemple
== quivalent 2 x == 0
< plus petit que 2 x < 2
> plus grand que 2 x > 2
<= plus petit ou gal 2 x <= 3
>= plus grand ou gal 2 x >= 3
oprateurs relationnels
!= non quivalent 2 a != b
Les notions dquivalence et de non quivalence sappliquent toutes les primitives, ainsi quaux handles
dobjets.
Il faut noter que lquivalence applique aux handles dobjets concerne les handles, et non les objets eux-
mmes ! Deux handles sont quivalents sils pointent vers le mme objet. Il ne sagit donc pas dobjets gaux,
mais dun seul objet.
Pour tester si deux objets distincts (ou non) sont effectivement gaux, il convient dutiliser la mthode equals.
Considrons le petit programme suivant :
I nt eger a = new I nt eger ( 100) ;
I nt eger b = new I nt eger ( 100) ;
I nt eger c = a ;
Esnard Aurlien cours de Java ENSERB informatique
Page 9 sur 34
Syst em. out . pr i nt l n( a == b) ;
Syst em. out . pr i nt l n( a == c) ;
Syst em. out . pr i nt l n( a. equal s( b) ) ;
La premire impression affiche false, la deuxime true et la dernire true. Par ailleurs, on aurait pu tout aussi
bien remplacer a.equals(b) par b.equals(a).
Mthode equals
En fait, la mthode equals appartient la classe Object et toutes les autres classes en hritent. On donne ci-
dessous sa dfinition initiale, qui compare les handles :
publ i c equal s( Obj ect obj ) {
r et ur n ( t hi s == obj ) ;
}
Dans cette dfinition, on constate que equals se comporte exactement comme ==. En revanche, dans la plus part
des classes (comme Integer, voir lexemple prcdent) la mthode est redfinie pour quelle compare le contenu
des objets plutt que leur handles.
Cette mthode est souvent problmatique et il convient de consulter la documentation.
Oprateurs logiques
symbole description arit exemple
&& et 2 a && b
|| ou 2 a || b oprateurs logiques
! non 1 !a
Lvaluation des expressions logiques est stoppes ds lors que le rsultat est dtermin. Lvaluation partielle
optimise le code mais peut avoir des effets indsirables. Une manire de forcer lvaluation consiste utiliser les
oprateurs darithmtique binaire.
Oprateurs darithmtique binaire
Les oprateurs darithmtiques binaires agissent au niveau des bits de donnes, sans tenir comte de ce quils
reprsentent.
symbole description arit exemple
& et 2 a & b
| ou 2 a | b
^ ou exclusif 2 a ^ b
~ non 1 ~a
<< dcalage gauche 2 a << 2
>> dcalage droite 2 b >> 2
oprateurs darithmtique binaire
>>>
dcalage droite sans
extension du signe
2 b >>> 2
Rappelons que le bit de signe (des types entiers) est le bit de poids fort.
On peut utiliser les oprateurs darithmtique binaire avec des valeurs logiques, qui sont des valeurs sur 1 bit.
Lintrt de cette possibilit est que, sagissant doprateurs arithmtiques, ils sont toujours valus.
Loprateur trois oprandes
symbole description arit exemple
oprateur trois oprandes ? : condition ? vrai : faux 3 y < 5 ? 4 * y : 2 * y
Esnard Aurlien cours de Java ENSERB informatique
Page 10 sur 34
Si condition est vrai, alors on retourne lvaluation de lexpression vrai, sinon on retourne celle de faux.
Oprateurs de casting
new
Loprateur new permet dinstancier une classe, cest--dire de crer une instance de cette classe.
instanceof
L'oprateur instanceof permet de tester un objet est une instance dune classe donne (ou de l'une de ses sous-
classes). Il prend en paramtre gauche un handle, et droite un nom de classe ; il retourne un boolean.
St r i ng y = " bonj our " ;
bool ean a = y i nst anceof St r i ng ;
Dans cet exemple, a vaut true.
Loprateur instanceof ne permet de tester le type dune primitive.
Il existe galement une version dynamique de loprateur instanceof, sous la forme dune mthode de la classe
class.
Loprateur +pour String
Les chanes de caractres dispose de l'oprateur +qui permet de concatner deux chanes ; +=est aussi valide
pour les chanes de caractres.
St r i ng x = " maman" ;
Syst em. out . pr i nt l n( " bonj our " + x) ;
Priorit des oprateurs
Les oprateurs par ordre de prsance dcroissante sont les suivants :
Oprateurs Ordre dvaluation
Appel de mthode . [] () - + De gauche droite
++ -- ! ~ (cast) new
* / %
+ -
<< >> >>>
< > <= >=
== !=
&
^
|
&&
||
?:
= op=
,
Les structures de contrle
Les structures de contrle sont presque les mmes que celles utilises en C ou en C++. On les rappelle ci-dessous
en prcisant les spcificits Java.
Esnard Aurlien cours de Java ENSERB informatique
Page 11 sur 34
structure de contrle syntaxe commentaires
return ; cas dune mthode void
retour dune mthode
return (type de retour) ;
if (expression) instruction ;
instruction conditionnelle if
if (expression) {bloc dinstructions }
les parenthses sont obligatoire en Java
autour de lexpression boolenne. De mme
le point-virgule est obligatoire en fin de
bloc.
if (expression) instruction ;
else instruction ;
if (expression) {bloc dinstructions}
else {bloc dinstructions}
instruction conditionnelle else
if (expression) ;
else {bloc dinstructions}
On ne peut pas donner une instruction vide
aprs la condition if.
instruction conditionnelle else
if
if (expression) {bloc dinstructions}
else if {bloc dinstructions}

else if {bloc dinstructions}


else {bloc dinstructions}
Il sagit en fait dune structure de contrle
part entire crite en deux mots !
la boucle for
for(initialisation ; test ; incrmentation)
{bloc dinstructions}
la partie initialisation se compose dune ou
plusieurs initialisations (spares par des
virgules. La partie test est une expression
boolenne. La partie incrmentation peut
contenir plusieurs instruction spares par
des virgules.
break ;
Interruption de litration en cours et
passage linstruction suivant la boucle.
utilisation de break et
continue dans les boucles
continue ;
Interruption de litration en cours et retour
au dbut de la boucle avec excution de la
partie incrmentation.
linstruction while
while (expression boolenne)
{bloc dinstructions}
linstruction switch
switch (variable)
case valeur1 : instructions1 ;
case valeur2 : instructions2 ;

default : instructions ;
Les bloc sont dlimits par deux
instructions case ! Lorsquune galit est
trouve, le bloc dinstruction correspondant
est excut, ainsi que tous les blocs
suivant ! Pour quun seul bloc ne soit
excut, il faut utiliser explicitement
linstruction break.
Mots cls
static
Un lment dclar static appartient une classe et non ses instances. Les objets instancis partir dune classe
ne possdent pas les lments de cette classe qui ont t dclar static. Un seul lment existe pour la classe et il
est partag par toutes les instances. Cela ne limite en aucune faon laccessibilit mais conditionne le rsultat
obtenu lors des accs. Les primitives, les objets et les mthodes peuvent tre dclar static.
final
De nombreux langages de programmation, par exemple, font la diffrence entre les donnes dont la valeur peut
tre modifie (les variables) et celles dont la valeur est fixe (les constantes). J ava ne dispose pas de constantes.
Ce nest pas une limitation, car J ava dispose dun mcanisme beaucoup plus puissant, avec le modificateur final,
qui permet non seulement dutiliser une forme de constantes, mais galement dappliquer ce concept dautres
lments comme la mthode ou les classes.
Esnard Aurlien cours de Java ENSERB informatique
Page 12 sur 34
synchronized
Cf. Threads.
native
Cf. Les mthodes.
transient
Le mot cl transient sapplique aux variables dinstances (primitives et objets). Il indique que la variable
correspondante est transitoire et que sa valeur ne doit pas tre conserv lors des oprations de srialisation. La
srialisation est une opration qui permet denregistrer un objet J ava sur un disque, afin de le conserver pour une
session ultrieure, ou de lenvoyer travers un rseau. Lors de la srialisation, tous les champs sont sauvegards
lexception de ceux dclars transient.
volatile
Le mot cl volatile sapplique aux variables pour indiquer quelles ne doivent pas tre lobjet doptimisation. En
effet, le compilateur effectue certaines manipulations pour acclrer le traitement (utilisation des registres). Ces
optimisations peuvent savrer problmatiques ds lors que plusieurs processus utilisent la mme variable, celle-
ci risque de ne pas tre jour ! Il est donc ncessaire dempcher une telle optimisation.
abstract
Le mot cl abstract peut tre employ pour qualifier une classe ou une mthode.
Cf. Classes abstraites, Interface, Polymorphisme
Esnard Aurlien cours de Java ENSERB informatique
Page 13 sur 34
Chapitre 2 Concepts de base de la
programmation oriente objet
Introduction
Tout est objet !
Le principe fondamental dun langage orient objet est que le langage doit permettre dexprimer la solution dun
problme laide des lments de ce problmes. Par exemple, un programme traitant des images doit manipuler
des structures de donnes reprsentant des images, et non leur traduction sous formes dune suite de bits. De
cette faon, on procde une abstraction.
J ava est laboutissement (pour le moment, du moins) de ce concept. Pour J ava, lunivers du problme traiter est
constitu dobjets. Cette approche est la plus naturelle car elle correspond notre faon dapprhender lunivers,
ce qui facilite la modlisation des problmes.
Rappelons ici le deuxime et troisime prcepte de Descartes extraits du discours de la mthode (1637) et qui
vont dans ce sens :
Le deuxime, de diviser chacune des difficults que jexaminerais , en autant de parcelles quil se
pourrait, et quil serait requis pour les rsoudre.
Le troisime, de conduire par ordre mes penses, en commenant par les objets les plus simples et les
plus aiss connatre, pour monter peu, comme par degrs, jusques la connaissance des plus
composs ; et supposant mme lordre entre ceux qui ne se prcdent point naturellement les uns les
autres.
Tout est donc objet. Il faut entendre par objet, lment de lunivers relatif au problme traiter. Les objets
appartiennent des catgories appeles classes, qui divisent cet univers.
Illustration des concepts de classe et dobjet
Si notre problme concerne les animaux, nous pouvons crer une classe que nous appellerons Animal. Si nous
devons considrer les chiens et les chats, nous crerons les trois classes drive de la classe Animal : les classes
Chien et Animal. Peu importe que cette division ne soit pas pertinent dans lunivers rel, il suffit quelle le soit
dans celui du problme traiter.
Nous reprsenterons cette division de lunivers de la faon suivante :
Animal
Chien Chat
Esnard Aurlien cours de Java ENSERB informatique
Page 14 sur 34
Considrons prsent le modle suivant :
Il est vident que le rapport entre milou et Chien nest pas de la mme nature que le rapport entre Chien et
Animal. Chien est une sous-classe de Animal. Dans la terminologie de J ava, on dit que Chien tend la classe
Animal. En revanche milou nest pas une classe. Cest un reprsentant de la classe Chien. Selon la terminologie
J ava, on dit que milou est une instance de la classe Chien.
Les classes
Dfinition
La classe regroupe la dfinition des membres de classe, cest--dire :
- des mthodes, les oprations que lon peut effectuer ;
- des champs, les variables que lon peut traiter ;
- des constructeurs, qui permettent de crer des objets ;
- et encore dautres choses plus particulires.
Plus prcisment, une classe peut contenir des variables (primitives ou objets), des classes internes, des
mthodes, des constructeurs, et des finaliseurs.
La dclaration d'une classe se fait de la faon suivante :
[ Modi f i cat eur s] class NomCl asse
{
corps de la classe
}
Le nom de la classe doit dbuter par une majuscule.
Considrons lexemple suivant :
Cl ass Ani mal {
// champs
bool ean vi vant ;
i nt ge ;
// constructeurs
Ani mal ( ) {
}
// mthodes
Animal
Chien Chat
milou rantanplan flix sylvestre
Esnard Aurlien cours de Java ENSERB informatique
Page 15 sur 34
voi d vi el l i t ( ) {
++ge ;
}
voi d cr i e( ) {
}
}
Les classes final
Une classe peut tre dclare final, dans un but de scurit ou doptimisation. Une classe final ne peut tre
tendue pour crer des sous-classes. Par consquent, ses mthodes ne peuvent pas tre redfinies et leur accs
peut donc se faire sans recherche dynamique.
Une classe final ne peut pas tre clone.
Les classes internes
Une classe J ava peut contenir, outre des primitives, des objets (du moins leurs rfrences) et des dfinitions de
mthodes, des dfinitions de classe. Nous allons maintenant nous intresser de plus prs cette possibilit.
Plusieurs classes dans un mme fichier
Il arrive frquemment que certaines classes ne soient utilises que par une seule autre classe. Considrons
lexemple suivant :
Cl ass Ani mal {
// champs
bool ean vi vant ;
i nt ge ;
Coor donnes posi t i on ;
// constructeurs
Ani mal ( ) {
posi t i on = new Coor donnes( ) ;
}
. . .
}
Cl ass Coor donnes {
// champs
i nt x = 0;
i nt y = 0;
. . .
}
Toutes ces classes sont dfinies dans le mme fichier, ce qui convient dans le cadre de la dmonstration mais
certainement pas pour la pratique courante de la programmation efficace. Chacune de ces classes pourrait tre
dfinie sparment dans un fichier et affecte un package.
Esnard Aurlien cours de Java ENSERB informatique
Page 16 sur 34
Lors de la compilation du prcdent fichier Animal.java, le compilateur produit deux fichiers : Animal.class et
Coordonnes.class.
Les classes imbriques ou static
Il peut tre avantageux dans certains cas placer la dfinition dune classe lintrieur dune autre, lorsque celle-
ci concerne uniquement la classe principale . Voyons pour notre exemple :
Cl ass Ani mal {
// champs
bool ean vi vant ;
i nt ge ;
Coor donnes posi t i on ;
// classes imbriques
static Class Coordonnes {
// champs
int x = 0;
int y = 0;
...
}
// constructeurs
Ani mal ( ) {
posi t i on = new Coor donnes( ) ;
}
. . .
}
La dfinition de la classe Coordonnes est maintenant imbrique dans la classe Animal. Par ailleurs, la rfrence
la classe Coordonnes devient Animal.Coordonnes. De manire gnrale, les rfrences une classe
imbrique en J ava se font en utilisant le point comme sparateur.
Lors de la compilation du fichier ci-dessus, Animal.java, le compilateur produit deux fichiers : Animal.class et
Animal$Coordonnes.class pour la classe imbrique.
Quant au chemin daccs, notons que mesclasses.Animal dsigne la classe Animal dans le package mesclasse,
tandis que mesclasses.Animal.Coordonnes dsigne la classe Coordonnes imbrique dans la classe Animal,
elle-mme contenu dans le package mesclassses. Ainsi il est possible dutiliser la directive import pour importer
les classes imbriques explicitement ou en bloc :
i mpor t mescl asses. Ani mal . Coor donnes ;
i mpor t mescl asses. Ani mal . * ;
Les classes imbriques peuvent elles-mmes contenir dautres classes imbriques, sans limitation de profondeur,
du moins du point de vue de J ava.
Un dernier point. La classe Coordonnes a t dclare static, ce qui est obligatoire pour toute classe imbrique.
En revanche, les interfaces imbriques sont automatiquement dclares static et il nest donc pas ncessaire de
les dclarer explicitement comme telles.
Esnard Aurlien cours de Java ENSERB informatique
Page 17 sur 34
Les classes membres
La particularit des classes imbriques est quelles sont
Les classes locales
Les classes anonymes
Les champs
Dfinition
Ltat reprsente lensemble des variables qui caractrisent une classe ; on parle encore de champs ou de
membres. Notons que J ava initialise par dfaut les variables membres.
Considrons lexemple suivant :
Cl ass Ani mal {
// champs
i nt ge ;
st at i c i nt l ongvi t = 100 ;
}
Variables dinstances & Variables static
Dans lexemple ci-dessus, ge est une variable dinstance, tandis que longvit reprsente une variable static.
Dans cet exemple, nous avons considr que la longvit tait une caractristique commune tous les animaux,
mettons 100 ans ! Il nest donc pas ncessaire de dupliquer cette information dans chacune des instances de la
classe. Nous avons donc choisi de dclarer longvit comme une variable static. Il en rsulte que cette variable
appartient la classe et non ses instances.
Pour comprendre cette nuance, considrons une instance de la classe Animal, appel monAnimal. Lobjet
monAnimal possde sa propre variable ge, laquelle il est possible daccder grce la syntaxe :
monAni mal . ge
Lobjet monAnimal ne possde pas de variable longvit. Normalement, longvit appartient la classe Animal,
et il est possible dy accder en utilisant la syntaxe :
Ani mal . l ongvi t
Cependant, J ava nous permet galement dutiliser la syntaxe :
monAni mal . l ongvi t
Mais il faut bien comprendre que ces deux expressions font rfrence la mme variable. On peut utiliser le nom
de la variable seul pour y faire rfrence, uniquement dans la dfinition de la classe.
Les variables final
Une variable dclare final ne peut plus voir sa valeur modifie. Elle remplit alors le rle de constante dans
dautres langages. Une variable final est le plus souvent utilise pour encoder des valeurs constantes.
Par exemple, on peut dfinir la constante Pi de la manire suivante :
Esnard Aurlien cours de Java ENSERB informatique
Page 18 sur 34
f i nal f l oat pi = 3. 14 ;
Dclarer une variable final offre deux avantages. Le premier concerne la scurit. En effet, le compilateur
refusera toute affectation ultrieure dune valeur la variable. Le deuxime avantage concerne loptimisation du
programme. Sachant que la valeur en question ne sera jamais modifi, le compilateur est mme de produire un
code plus efficace. En outre, certains calculs prliminaires peuvent tre effectus.
Les mthodes
Les mthodes sont les oprations ou les fonctions que l'on peut effectuer sur une classe. On distingue deux types
de mthodes :
- les accesseurs, qui ne modifient pas ltat et se contente de retourner la valeur dun champs ;
- les modificateurs, qui modifient ltat en effectuant un calcul spcifique.
Une dclaration de mthode est de la forme suivante :
[ Modi f i cat eur s] Type nomMt hode ( paramtres . . . )
{
corps de la mthode
}
Le nom de la mthode dbute par une minuscule ; la coutume veut quun accesseur dbute par le mot get et
quun modificateur dbute par le mot set .
Les retours
Les mthodes dinstances
Les mthodes static
Les mthodes peuvent galement tre dclar static. Imaginons que nous souhaitons construire un accesseur
pour la variable longvit (voir exemple prcdent). Nous pouvons le faire de la faon suivante :
Cl ass Ani mal {
// champs
i nt ge ;
st at i c i nt l ongvi t = 100 ;
// mthodes
st at i c i nt get Longvi t ( ) {
r et ur n l ongvi t ;
}
}
La mthode getLongvit peut tre dclar static car elle ne fait rfrence qu des membres static (en
loccurrence, la variable longvit). Ce nest pas une obligation. Le programme fonctionne aussi si la mthode
nest pas dclar static. Dans ce cas, cependant, la mthode est duplique chaque fois quune instance est cre,
ce qui nest pas trs efficace.
Comme dans le cas des variables, les mthodes static peuvent tre rfrences laide du nom de la classe ou du
nom de linstance. On peut utiliser le nom de la mthode seul , uniquement dans la dfinition de la classe.
Esnard Aurlien cours de Java ENSERB informatique
Page 19 sur 34
Il est important de noter que les mthodes static ne peuvent en aucun cas faire rfrence aux mthodes ou aux
variables non static de la classe. Elles ne peuvent non plus faire rfrence une instance. (La rfrence this ne
peut pas tre employ dans la mthode static.)
Les mthodes static ne peuvent pas non plus tre redfinies dans les classes drives.
Les mthodes native
Une mthode peut galement tre dclare native, ce qui a des consquences importantes sur la faon de
lutiliser. En effet, une mthode native nest pas crite en J ava, mais dans un autre langage. Les mthodes native
ne sont donc pas portable dun environnement un autre. Les mthodes native nont pas de dfinition. Leur
dclaration doit tre suivie dun point-virgule. ()
Les mthodes final
Les mthodes peuvent galement tre dclar final, ce qui restreint leur accs dune toute autre faon. En effet,
les mthodes final ne peuvent pas tre redfinies dans les classes drives. Ce mot cl est utilis pour sassurer
que la mthode dinstance aura bien le fonctionnement dtermin dans la classe parente. (Sil sagit dune
mthode static, il nest pas ncessaire de la dclarer final car les mthodes static ne peuvent jamais tre
redfinies.)
Les mthodes final permettent galement au compilateur deffectuer certaines optimisations qui acclrent
lexcution du code. Pour dclarer une mthode final, il suffit de placer ce mot cl dans sa dclaration de la
faon suivante :
f i nal i nt cal cul ( i nt i , i nt j ) {. . . }
Le fait que la mthode soit dclar final na rien voir avec le fait que ces arguments le soient ou non.
Nous reviendrons sur lutilit des mthodes final dans le chapitre concernant le polymorphisme, et notamment le
concept early & late binding.
Les constructeurs
Nous allons maintenant nous intresser au dbut de la vie des objets : leur cration et leur initialisation. Puis
nous dirons aussi un mot sur la fin de vie des objet en traitant du garbage collector.
Les constructeurs : cration dobjets
Les constructeurs et les initialiseurs sont des lments trs importants car ils dterminent la faon dont les objets
J ava commencent leur existence. Ces mcanismes, servant contrler la cration dinstance de classe, sont
fondamentalement diffrents des mthodes.
Les constructeurs (constructor)
Les constructeurs sont des mthodes particulires en ce quelles portent le mme nom que la classe laquelle
elles appartiennent. Elles sont automatiquement excutes lors de la cration dun objet. Le constructeur par
dfaut ne possdent pas darguments.
- Les constructeurs nont pas de type et ne retournent pas.
- Les constructeurs ne sont pas hrits par les classes drives.
- Lorsquun constructeur est excut, les constructeurs des classes parentes le sont galement. Cest le
chanage des constructeurs. Plus prcisment, si en premire instruction le compilateur ne trouvent pas
un appel this() ou super(), il rajoute un appel super(). Lutilisation de this() permet de
partager du code entre les constructeurs dune mme classe, dont lun au moins devra faire rfrence au
constructeur de la super-classe.
Esnard Aurlien cours de Java ENSERB informatique
Page 20 sur 34
- Une mthode peut porter le mme nom quun constructeur, ce qui est toutefois formellement
dconseill.
Exemple de constructeurs
Considrons lexemple suivant :
cl ass Ani mal {
// champs
bool ean vi vant ;
i nt ge ;
// constructeurs
Ani mal ( ) {
}
Ani mal ( i nt a) {
ge = a ;
vi vant = t r ue ;
}
// mthodes
}
Si nous avions donn au paramtre a le mme nom que celui du champs ge, il aurait fallu accder celle-ci de
la faon suivante :
Ani mal ( i nt ge) {
t hi s. ge = ge ;
vi vant = t r ue ;
}
Toutefois, pour plus de clart, il vaut mieux leur donner des noms diffrents. Dans le cas de linitialisation dune
variable dinstance laide dun paramtre, on utilise souvent pour le nom du paramtre la premire (ou les
premires) lettre(s) du nom de la variable dinstance.
Par ailleurs, il faut remarqu que laccs un paramtre lintrieur dune mthode est toujours plus rapide que
laccs une variable dinstance. Le gain de performance est de 20%. Par consquent, il faut utiliser les
paramtres chaque fois que cest possible.
Cration dobjets (object)
Tout objet java est une instance dune classe. Pour allouer la mmoire ncessaire cet objet, on utilise
loprateur new, qui lance l'excution du constructeur.
La cration dun Animal se fait laide de linstruction suivante :
Ani mal nouvel Ani mal = new Ani mal ( 3) ;
Surcharger les constructeurs
Les constructeurs, tout comme les mthodes, peuvent tre surchargs dans le sens o il peut y avoir plusieurs
constructeurs dans une mme classe, qui possdent le mme nom (celui de la classe). Un constructeur sidentifie
de part sa signature qui doit tre diffrente davec tous les autres constructeurs.
Esnard Aurlien cours de Java ENSERB informatique
Page 21 sur 34
Supposons que la plupart des instances soient cres avec 0 pour valeur initiale de ge. Nous pouvons alors
rcrire la classe Animal de la faon suivante :
cl ass Ani mal {
// champs
bool ean vi vant ;
i nt ge ;
// constructeurs
Ani mal ( ) {
ge = 0 ;
vi vant = t r ue ;
}
Ani mal ( i nt a) {
ge = a ;
vi vant = t r ue ;
}
// mthodes
}
Ici, les deux constructeurs possdent des signatures diffrentes. Le constructeur sans paramtre traite le cas o
lge vaut 0 la cration de linstance. Une nouvelle instance peut donc tre cre sans indiquer lge de la faon
suivante :
Ani mal nouvel Ani mal = new Ani mal ( ) ;
Autorisation daccs aux constructeurs
Les constructeurs peuvent galement tre affects dune autorisation daccs. Un usage frquent de cette
possibilit consiste comme pour les variables, contrler leur utilisation, par exemple pour soumettre
linstanciation certaines conditions.
Initialisation des objets
Il existe en J ava trois lments pouvant servir linitialisation :
- les constructeurs,
- les initialiseurs de variables dinstances et statiques,
- les initialiseurs dinstances et statiques.
Nous avons dj prsent linitialisation utilisant un constructeur. Voyons les deux autres manires.
Les initialiseurs de variables dinstances et statiques
Considrons la dclaration de variable suivante :
i nt a ;
Si cette dclaration se trouve dans une mthode, la variable na pas de valeurs. Toute tentative dy faire rfrence
poduit une erreur de compilation.
En revanche, sil sagit dune variable dinstance (dont la dclaration se trouve en dehors de toute mthode),
J ava linitialise automatiquement au moment de linstanciation avec une valeur par dfaut. Pour les variables
statiques, linitialisation est ralise une fois pour toute la premire utilisation de la classe.
Esnard Aurlien cours de Java ENSERB informatique
Page 22 sur 34
Les variables de type numrique sont initialises 0. Le type boolen est initialis false.
Nous pouvons cependant initialiser nous-mmes les variables de la faon suivante :
i nt a = 1 ;
i nt b = a*7 ;
f l oat c = ( bc) / 3 ;
bool ean d = ( a < b) ;
Les initialiseurs de variables permettent deffectuer des oprations dune certaine complexit, mais celle-ci est
tout de mme limite. En effet, ils doivent tenir sur une seule ligne. Pour effectuer des oprations plus
complexes, il convient dutiliser les constructeurs ou encore les initialiseurs dinstances.
Les initialiseurs dinstances
Un initialiseur dinstance est tout simplement plac, comme les variables dinstances, lextrieur de toute
mthode ou constructeur.
Voyons lexemple suivant :
cl ass Exempl e {
// champs
i nt a ;
i nt b ;
f l oat c ;
bool ean d ;
// initialiseurs
{
a = 1 ;
b = a*7 ;
c = ( b- a) / 3 ;
d = ( a < b) ;
}
}
Les initialisateurs dinstances permettent de raliser des initialisations plus complexes. Ils offrent en outre
lavantage par rapport aux constructeurs dtre beaucoup plus rapides. De plus les initialisateurs permettent
dutiliser les exceptions pour traiter les conditions derreurs. Un autre avantage des initialisateurs est quils
permettent deffectuer un traitement quelle que soit la signature du constructeur appel. Il est ainsi possible de
placer le code dinitialisation commun tous les constructeurs dans un initialiseur et de ne traiter dans les
diffrents constructeurs que les oprations spcifiques.
Les initialisateurs comportent cependant des limitations. Il nest pas possible de leur passer des paramtres
comme dans le cas des constructeurs. De plus, ils sont excuts avant les constructeurs et ne peuvent donc
utiliser les paramtres de ceux-ci.
Les initialiseurs statiques
Un initialiseur statique est semblable un initialiseur dinstance, mais il est prcd du mot static. Considrons
lexemple suivant :
cl ass Voi t ur e {
// champs
st at i c i nt capaci t ;
Esnard Aurlien cours de Java ENSERB informatique
Page 23 sur 34
// initialiseurs
st at i c {
capaci t = 80;
Syst em. out . pr i nt l n( " La var i abl e vi ent d t r e i ni t i al i se. \ n" ) ;
}
// constructeurs
Voi t ur e( ) {
}
// mthodes
st at i c i nt get Capaci t ( ) {
r et ur n capaci t ;
}
}
Linitialiseur statique est excut au premier chargement de la classe, que ce soit pour utiliser un membre
statique, Voi t ur e. get Capaci t ( ) ou pour linstancier, Voi t ur e maVoi t ur e = new Voi t ur e( ) .
Les membres statiques (ici la variable capaci t ) doivent tre dclars avant linitialiseur. Il est possible de
placer plusieurs initialiseurs statiques, o lon souhaite dans la classe. Ils seront tous excuts au premier
chargement de celle-ci, dans lordre o ils apparaissent.
Les variables final non initialises
Les finaliseurs
La destruction des objets (garbage collector)
Avec certains langages, le programmeur doit soccuper lui-mme de librer la mmoire en supprimant les objets
devenus inutiles. Avec J ava, le problme est rsolu de faon trs simple : un programme, appel garbage
collector, ce qui signifie littralement ramasseur dordures , est excut automatiquement ds que la mmoire
disponible devient infrieure un certain seuil. De cette faon, aucun objet inutilis nencombrera la mmoire.
Le concept de lhritage
Hirarchie des classes
De plus chaque classe drive dune classe de niveau suprieur, appele sur-classe. Cela est vrai pour toutes les
classes sauf une. Il sagit de la classe Object, qui est lanctre de toutes les classes.
Toute instance dune classe est un objet du type correspondant, mais aussi du type de toutes ses classes anctres.
SousClasse hrite de toutes les caractristiques de Classe, et donc, par transitivit, de SurClasse.
Une classe est toujours construite partir dune autre classe dont elle est drive. Une classe drive est une
sous-classe d'une sur-classe.
Extends
Lorsque le paramtre extends est omis, la classe dclare est une sous classe de l'objet Objet.
Esnard Aurlien cours de Java ENSERB informatique
Page 24 sur 34
Rfrence la classe parente
Redfinition des champs et des mthodes
Redfinition des mthodes
Une deuxime dclaration d'une mthode dans une classe drive remplace la premire. Voyons un exemple
avec la mthode crie( ) redfinie dans la classe Chien drive de la classe Animal.
Cl ass Ani mal {
// champs
// mthodes
voi d cr i e( ) {
}
}
Cl ass Chi en ext ends Ani mal {
// champs
// mthodes
voi d cr i e( ) {
Syst em. out . pr i nt l n( " Ouah- Ouah ! " ) ;
}
}
Classe
SurClasse
Object
SousClasse
Esnard Aurlien cours de Java ENSERB informatique
Page 25 sur 34
La surchage
Surcharger les mthodes
Signature dune mthode
Une mthode est dite surcharge si elle permet plusieurs passages de paramtres diffrents.
Accessibilit
En J ava, il existe quatre catgories dautorisations daccs, spcifis par les modificateurs suivants : private,
protected, public. La quatrime catgorie correspond labsence de modificateur.
Nous allons les prsenter en partant du moins restrictif jusquau plus restrictif.
public
Les classes, les interfaces, les variables (primitives ou objets) et les mthodes peuvent tre dclares public.
Les lments public peuvent tre utiliss par nimporte qui sans restriction ; il est accessible l'extrieur de la
classe.
protected
Cette autorisation sapplique uniquement aux membres de classes, cest--dire aux variables (objets ou
primitives), aux mthodes et aux classes internes. Les classes qui ne sont pas membre dune autre classe ne
peuvent pas tre dclares protected.
Dans ce cas, laccs en est rserv aux mthodes des classes appartenant au mme package, aux classes drives
de ces classes, ainsi quaux classes appartenant aux mmes packages que les classes drives. Plus simplement,
on retiendra quun lment dclar protected nest visible que dans la classe o il est dfini et dans ses sous-
classes.
Autorisation par dfaut
Lautorisation par dfaut sapplique aux classes, interfaces, variables et mthodes.
Les lments qui disposent de cette autorisation sont accessibles toute les mthodes des classes du mme
package. Les classes drives ne peuvent donc y accder que si elles sont explicitement dclares dans le mme
package.
Rappelons que les classes nappartenant pas explicitement un package appartiennent automatiquement au
package par dfaut. Toute classe sans indication de package dispose donc de lautorisation daccs toutes les
classes se trouvant dans le mme cas.
private
Lautorisation private est la plus restrictive. Elle sapplique aux membres dune classe (variables, mthodes,
classes internes).
Les lments dclars private ne sont accessibles que depuis la classe qui les contient ; il n'est visible que dans la
classe o il est dfini.
Ce type dautorisation est souvent employ pour les variables qui ne doivent tre lues ou modifies qu laide
dun accesseur ou dun modificateur. Les accesseurs et les modificateurs, de leur ct, sont dclars public, afin
que tout le monde puisse utiliser la classe.
Esnard Aurlien cours de Java ENSERB informatique
Page 26 sur 34
Les classes abstraites, les interfaces, le polymorphisme
Le mot cl abstract
Mthodes et classes abstraites
Une mthode dclare abstract ne peut tre excute. En fait, elle na pas dexistence relle. Sa dclaration
indique simplement que les classes drives doivent la redfinir.
Les mthodes abstract prsentent les particularits suivantes :
- Une classe qui contient une mthode abstract doit tre dclare abstract.
- Une classe abstract ne peut pas tre instancie.
- Une classe peut tre dclare abstract, mme si elle ne comporte pas de mthodes abstract.
- Pour pouvoir tre instancie, une sous-classe dune classe abstract doit redfinir toute les mthodes
abstract de la classe parente.
- Si une des mthodes nest pas redfinie de faon concrte, la sous-classe est elle-mme abstract et doit
tre dclare explicitement comme telle.
- Les mthodes abstract nont pas dimplmentation. Leur dclaration doit tre suivie dun point-virgule.
Ainsi dans lexemple prcdent la mthode crie( ) de la classe Animal aurait pu tre dclare abstract, ce qui
signifie que tout Animal doit tre capable de crier, mais que le cri dun animal est une notion abstraite. La
mthode ainsi dfinie indique quune sous-classe devra dfinir la mthode de faon concrte.
abst r act cl ass Ani mal {
// champs
// mthodes
abst r act voi d cr i e( ) ;
}
cl ass Chi en ext ends Ani mal {
// champs
// mthodes
voi d cr i e( ) {
Syst em. out . pr i nt l n( " Ouah- Ouah ! " ) ;
}
}
cl ass Chat ext ends Ani mal {
// champs
// mthodes
voi d cr i e( ) {
Syst em. out . pr i nt l n( " Mi aou- Mi aou ! " ) ;
}
Esnard Aurlien cours de Java ENSERB informatique
Page 27 sur 34
}
De cette faon, il nest plus possible de crer un animal en instanciant la classe Animal. En revanche, grce la
dclaration de la mthode abstract crie( ) dans la classe Animal, il est possible de faire crier un animal sans
savoir sil sagit dun chien ou dun chat, en considrant les instances de Chien ou de Chat comme des instances
de la classe parente.
Ani mal ani mal 1 = new Chi en( ) ;
Ani mal ani mal 2 = new Chat ( ) ;
ani mal 0. cr i e( ) ;
ani mal 1. cr i e( ) ;
Le premier animal crie "Ouah-Ouah !" ; le second, "Miaou-Miaou !".
Les interfaces
Une classe peut contenir des mthodes abstract et des mthodes non abstract. Cependant, il existe une catgorie
particulire de classes qui ne contient que des mthodes abstract. Il sagit des interfaces. Les interfaces sont
toujours abstract, sans quil soit ncessaire de lindiquer explicitement. De la mme faon, il nest pas ncessaire
de dclarer leurs mthodes abstract.
Les interfaces obissent par ailleurs certaines rgles supplmentaires.
- Elles ne peuvent contenir que des variables static et final.
- Elles peuvent tre tendues comme les autres classes, avec une diffrence majeure : une interface peut
driver de plusieurs autres interfaces. En revanche, une classe ne peut pas driver uniquement dune ou
de plusieurs interfaces. Une classe drive toujours dune autre classe, et peut driver, en plus, dune ou
plusieurs interfaces.
-
Casting
Sur-casting
Un objet peut tre considr comme appartenant sa classe ou une classe parente selon le besoin, et cela de
faon dynamique. Nous rappelons ici que toutes classes drive de la classe Object, qui est un type commun
tous les objets. En dautres termes, le lien entre une classe et une instance nest pas unique et statique. Au
contraire, il est tabli de faon dynamique, au moment o lobjet est utilis. Cest la premire manifestation du
polymorphisme !
Le sur-casting est effectu de faon automatique par J ava lorsque cela est ncessaire. On dit quil est implicite.
On peut lexpliciter pour plus de clart, en utilisant loprateur de casting :
Chi en chi en = new Chi en( ) ;
Ani mal ani mal = ( Ani mal ) chi en ;
Aprs cette opration, ni le handle chien, ni lobjet correspondant ne sont modifis. Les handles ne peuvent
jamais tre redfinie dans le courant de leur existence. Seule la nature du lien qui lie lobjet aux handles change
en fonction de la nature des handles.
Le sur-casting est un peu moins explicite, lorsquon affecte un objet un handle de type diffrent. Par exemple :
Ani mal ani mal = new Chi en( ) ;
Esnard Aurlien cours de Java ENSERB informatique
Page 28 sur 34
Sous-casting
Le sous-casting doit obligatoirement tre explicite en J ava.
Polymorphisme
Utilisation du sur-casting
Considrons lexemple suivant, qui reprend les dfinitions prcdentes des classes Animal, Chien, et Chat et
illustre une premire sorte de polymorphisme avec sur-casting implicite sur la mthode crie( ).
publ i c cl ass Mai n {
// mthodes
publ i c st at i c voi d mai n( St r i ng[ ] ar gv) {
Chi en chi en = new Chi en( ) ;
Chat chat = new Chat ( ) ;
cr i e( chi en) ;
cr i e( chat ) ;
voi d cr i e( Ani mal ani mal ) {
ani mal . cr i e( ) ;
}
}
Le premier animal crie "Ouah-Ouah !" ; le second, "Miaou-Miaou !".
Late-binding
Il existe un moyen dviter le sous-casting explicite en J ava, appel late-binding. Cette technique fondamentale
du polymorphisme permet de dterminer dynamiquement quelle mthode doit tre appele.
Dans la plupart des langages, lorsque le compilateur rencontre un appel de mthode, il doit tre mme de savoir
exactement de quelle mthode il sagit. Le lien entre lappel et la mthode est alors tabli la compilation. Cette
technique est appele early binding (liaison prcoce). J ava utilise cette technique pour les appels de mthodes
dclares final. Elle a lavantage de permettre certaines optimisations.
En revanche, pour les mthodes qui ne sont pas final, J ava utilise la technique du late binding (liaison tardive).
Dans ce cas, le compilateur ntablit le lien entre lappel et la mthode quau moment de lexcution du
programme. Ce lien est tabli avec la version la plus spcifique de la mthode et doit tre diffrenci du concept
abstract. Considrons lexemple suivant pour sen convaincre.
cl ass Ani mal {
// mthodes
voi d cr i e( ) {
}
}
cl ass Chi en ext ends Ani mal {
// mthodes
voi d cr i e( ) {
Syst em. out . pr i nt l n( " Ouah- Ouah ! " ) ;
}
}
Esnard Aurlien cours de Java ENSERB informatique
Page 29 sur 34
cl ass Chat ext ends Ani mal {
// mthodes
voi d cr i e( ) {
Syst em. out . pr i nt l n( " Mi aou- Mi aou ! " ) ;
}
}
publ i c cl ass Mai n {
// mthodes
publ i c st at i c voi d mai n( St r i ng[ ] ar gv) {
Chi en chi en = new Chi en( ) ;
Chat chat = new Chat ( ) ;
cr i e( chi en) ;
cr i e( chat ) ;
voi d cr i e( Ani mal ani mal ) {
ani mal . cr i e( ) ;
}
}
Le premier animal crie "Ouah-Ouah !" ; le second, "Miaou-Miaou !". La mthode crie appel dans la mthode
crie de la classe Main est bien la plus spcifique, celle de Chien ou de Chat et non celle de Animal !
Polymorphisme
Le programme ci-dessous illustre le concept du polymorphisme. La classe Animal utilise la mthode abstraite qui
pour dfinir la mthode printQui de manire plus ou moins abstraite. Cela entrane une factorisation du code.
abst r act cl ass Ani mal {
// mthodes
abst r act St r i ng qui ( ) ;
voi d pr i nt Qui ( ) {
Syst em. out . pr i nt l n( " cet ani mal est un " + qui ( ) ) ;
}
}
cl ass Chi en ext ends Ani mal {
// mthodes
St r i ng qui ( ) {
r et ur n " chi en" ;
}
}
cl ass Chat ext ends Ani mal {
// mthodes
St r i ng qui ( ) {
r et ur n " chat " ;
}
Esnard Aurlien cours de Java ENSERB informatique
Page 30 sur 34
}
Limplmentation de la mthode qui est reli lappel, uniquement au moment de lexcution, en fonction du
type de lobjet appelant et non celui du handle !
Cest--dire,
Ani mal ani mal 1 = new Chi en( ) ;
Ani mal ani mal 2 = new Chat ( ) ;
ani mal 1. pr i nt Qui ( ) ;
ani mal 2. pr i nt Qui ( ) ;
donne comme rsultat :
cet ani mal est un chi en
cet ani mal est un chat
Esnard Aurlien cours de Java ENSERB informatique
Page 31 sur 34
Chapitre 3 Spcificits du langage
Les entres / sorties
Package
Les packages
Les packages accessibles par dfaut
Linstruction package
Linstruction import
Le clonage
Le clonage est une technique de cration dobjets
Les threads
Les threads (en franais processus indpendants) sont des mcanismes importants du langage J ava. Ils
permettent d'excuter plusieurs programmes indpendants les uns des autres. Ceci permet une excution parallle
de diffrentes tches de faon autonome.
Un thread ragit aux diffrentes mthodes suivantes :
- destroy( ) : arrt brutal du thread ;
- interrupt( ) permet d'interrompre les diffrentes mthodes d'attente en appelant une exception ;
- sleep( ) met en veille de thread ;
- stop( ) : arrt non brutal du thread ;
- suspend( ) : arrt d'un thread en se gardant la possibilit de le redmarrer par la mthode resume( ) ;
- wait( ) met le thread en attente ;
- yield( ) donne le contrle au schduleur.
La mthode sleep( ) est souvent employe dans les animations, elle permet de mettre des temporisations d'attente
entre deux squences d'image par exemple.
Programme principal : la mthode main
()
Cette mthode doit imprativement tre dclar public. Ainsi la classe contenant la mthode main( ), le
programme principal, doit tre public. Rappelons ici quun fichier contenant un programme J ava ne peut contenir
quune seule dfinition de classe dclare public. De plus le fichier doit porter le mme nom que la classe, avec
lextension .java.
Esnard Aurlien cours de Java ENSERB informatique
Page 32 sur 34
Les exceptions (exception) et les erreurs (error)
Deux types derreurs en Java
En J ava, on peut classer les erreurs en deux catgories :
- les erreurs surveilles,
- les erreurs non surveilles.
J ava oblige le programmeur traiter les erreurs surveilles. Les erreurs non surveilles sont celles qui sont trop
graves pour que le traitement soit prvu priori., comme par exemple la division par zro.
Publ i c cl ass Er r eur {
Publ i c st at i c voi d mai n ( St r i ng[ ] ar gs) {
i nt x = 10, y = 0, z = 0;
z = x / y ;
}
}
Dans ce cas, linterprteur effectue un traitement exceptionnel, il arrte le programme et affiche un message :
Except i on i n t hr ead " mai n"
j ava. l ang. Ar i t hmet i cExcept i on : / by zer o
at Er r eur . mai n( Er r eur . j ava: 5)
Principe
Lorsquune erreur de ce type est rencontre, linterprteur cre immdiatement un objet, instance dune classe
pariculire, elle-mme sous-classe de la classe Exception. Cet objet est cr normalement avec loprateur new.
Puis linterprteur part la recherche dune portion de code capable de recevoir cet objet et deffectuer le
traitement approri.
Sil sagit dune erreur surveille par le compilateur, celui-ci a oblig le programmeur fournir ce code. Dans le
cas contraire, le traitement est fourni par linterprteur lui-mme. Cette opration est appele lancement dune
exception (throw). Pour trouver le code capable de traiter lobjet, linterprteur se base sur le type de lobjet,
cest--dire sur la classe dont il est une instance.
Pour reprendre lexemple de la division par zro, une instance de la classe Ar i t hmet i cExcept i on est
lance. Si le programme ne comporte aucun bloc de code capable de traiter cet objet, celui-ci est attrap par
linterpryeur lui-mme. Un message derreur est alors affiche Except i on i n t hr ead " mai n" .
Attraper les exceptions
Nous avons vu que Java noblige pas le programmeur attrapper tous les types dexceptions. Seuls ceux
correspondant des erreurs surveilles doivent obligatoirement tre attraps. En fait, les exceptions qui ne
peuvent pas tre attrapes sont des instances de la classe RuntimeException ou une classe drive de celle-ci.
Cependant rien ninterdit dattraper ces exceptions. Nous avons dit
Esnard Aurlien cours de Java ENSERB informatique
Page 33 sur 34
Annexes
La machine virtuelle J ava (JVM)
J ava est un langage multi-plates-formes qui permet, selon Sun Microsystems, son concepteur, dcrire une fois
pour toute des applications capables de fonctionner dans tous les environnements. Cet objectif est atteint grce
lutilisation dune machine virtuelle J ava (J VM) qui excute les programmes crits dans ce langage.
Compilation
- compilation du code source : javac *.java ;
- excution sur la JVM : java MainFile.
Diagramme de classe UML
UML (Unified Modeling Language) propose une modlisation des langages unifies. Nous allons lutiliser
particulirement pour construire un diagramme de classe, qui modlise larchitecture des classes dans un
programme Java.
Ce diagramme est construit partir des classes crs par le programmeur (mises en gras) et il indique les
relations de dpendances entre classes par des flches, selon une typologie donne.
Reprsentation dune classe
visibilit
+ public
# protg
- priv
Relations de dpendances
En UML, on distingue plusieurs types de relations de dpendances : la gnralisation, lassociation, la
gnralisation particulire.
nom de la classe
attributs
oprations
code source
.java
bytecode
.class
compilation
javac
excution
java
Esnard Aurlien cours de Java ENSERB informatique
Page 34 sur 34
Gnralisation Relation dhritage
Association Relation de contenance
Une classe contient une instance dune autre classe.
Gnralisation particulire Implmentation dune interface
Autres relations de dpendance
Toutes les classes ne sont pas lis par une association ou une gnralisation (par exemple : String) ; il y a aussi
des interactions entre les objets qui surviennent lexcution
On peut les faire apparatre dans le diagramme de classe sous forme dune relation de dpendance
dependancy en prcisant paramtre ou variable locale .
En fait, la relation de dpendance est trs gnrale, elle indique quune classe a besoin de linterface dune autre
classe ; on dit aussi quune classe est cliente dune autre classe. Dans lexemple ci-dessous, Maclasse utilise des
String comme paramtres de mthodes.
Remarquons que lassociation et la gnralisation sont aussi des relations de dpendances.
Diagramme de squence UML
SuperClass
Class
hrite de
Class0 Class1
partie de
Interface
Class
implmente
MaClasse String
utilis par