Vous êtes sur la page 1sur 17

VI.

Champs et mthodes de classe


1. Champs de classe (variable de classe)
Considrons la dfinition simpliste suivante:
classClasseTest {
int n;
doubley;
}
Chaque objet de typeClasseTest possde ses propres champs n et y.
Par exemple avec les dclarations
ClasseTest objA1=newClasseTest(), objA2=newClasseTest();
objA1.n et objA2.n dsignent deux donnes diffrentes.
objA1.y et objA2.y dsignent aussi deux donnes diffrents.
1
objA1.n
objA1.y
objet objA1
objA2.n
objA2.y
objet objA2
Certains attributs peuvent tre partags par toutes les
instances dune classe. Cest--dire ils peuvent tre dfinis
indpendamment des instances (objets):
Par exemple le nombre dtudiants =le nombre dobjets
tudiant crs.
Ces attributs sont nomms champs de classe ou variables de
classe. Ils sont comparables aux variables globales .
Ces variables nexistent quen un seul exemplaire,
quel que soit le nombre dobjets de la classe. Elles sont
dfinies comme les attributs mais prcds du mot-clstatic.
2
Les attributs statiques ne sont pas instancis dans les objets
Considrons la classe:
classClasseTest {
doubley;
}
Soient objA1 et objA2 deux instances diffrentes.
ClasseTest objA1=newClasseTest(), objA2=newClasseTest();
staticint n; // la valeur de n est partage par toutes les instances
ClasseTest.n // champs (statique) de la classe ClasseTest
objA1 et objA2 partagent la mme variable n:
- Pour y accder, on utilise le nom de la classe
objA1.n et objA2.n dsignent la mme donne.
La valeur de lattribut n est indpendante de linstance (objet).
3
objA1.n ou ClasseTest.n
objA1.y
objet objA1
objA2.y
objet objA2
objA2.n ou ClasseTest.n
4
Champs de classe (variable de classe)
Exemple1:
classClasseTest {
int n;
doubley;
}
public classMethodeStatic{
public staticvoidmain(String[] args) {
ClasseTest objA1=newClasseTest();
ClasseTest objA2=newClasseTest();
// objA2.n = ?
}
}
objA1.n +=4; // objA1.n vaut 4 puisque n vaut 0
// initialisation par dfaut des attributs
// objA2.n vaut 0 : initialisation par dfauts des attributs.
5
Exemple2:
classClasseTest {
float y;
}
public classMethodeStatic{
public staticvoidmain(String[] args) {
ClasseTest objA1=newClasseTest();
ClasseTest objA2=newClasseTest();
// objA2.n = ?
}
}
staticint n; // la valeur de n est partage par toutes les instances
objA1.n +=4; // objA1.n vaut 4
// objA2 vaut 4 car champs statique .
// quivalent ClasseTest.n=4;
6
La classe Employ caractrise par les attributs
code, nom et nbEmploys
Les attributs code et nom sont des caractristiques
de chaque objet Employ contrairement au champ
nbEmploys qui est une caractristique
commune tous les objets (attribut statique)
Chaque objet, instance dune classe, donne des
valeurs particulires tous les attributs dfinis dans
sa classe sauf les attributs statiques ce qui dtermine
son tat
Attributs de la classe Employ
7
Champs de classe (variable de classe)
: Employ
code=1
nom="jamil"
: Employ
code=2
nom="alami "
2 objets de la classe
Employ
Un attribut statique dune classe est un attribut qui appartient la classe
et qui est partag par tous les objets de cette classe. Un attribut statique est
considr comme tant une variable globale tous les objets.
Les attributs statiques ne sont pas instancis dans les objets.
Employ
code : int
nom : String
nbEmploys: staticint
8
Une variable de classe (prcde du mot clef static) est partage par tous les objets de la mme classe.
Au dbut lors de la cration des
3 objets chacun des champs x
vaut -58 et des champs y vaut
20,
l'affichage par
System.out.println(...) donne les
rsultats suivants qui
dmontrent le partage de la
variable x par tous les objets.
Aprs excution :
obj1.x =101
obj1.y =100
obj2.x =101
obj2.y =20
obj3.x =101
obj3.y =20
AppliStatic.x=99
Variables de classe
Variable de classe
public class UneClasse
{
public static int compteur = 0;
public UneClasse ()
{
compteur++;
}
}
class AutreClasse
{
public void uneMethode()
{
int i = UneClasse.compteur;
}
}
Utilisation de la variable de classe
compteur dans le constructeur de
la classe
Utilisation de la variable de classe
compteur dans une autre classe
9
Excution ???
class Obj
{ privatestaticlong nb=0 ;
public Obj()
{ System.out.print ("++creationobjet Obj ; ") ;
nb ++;
System.out.println("il y en a maintenant " +nb) ;
}
}
public class TstObj
{ public static void main (String args[])
{ Obj a ;
System.out.println("Main 1") ;
a =new Obj() ;
System.out.println("Main 2") ;
Obj b ;
System.out.println("Main 3") ;
b =new Obj() ;
Obj c =new Obj() ;
System.out.println("Main 4") ;
}
}
Excution
Main 1
++creationobjet Obj ; il y en a maintenant 1
Main 2
Main 3
++creationobjet Obj ; il y en a maintenant 2
++creationobjet Obj ; il y en a maintenant 3
Main 4
Exemple 1 dutilisation dun champ de classe
10
2. Mthodes de classe
Ce sont des mthodes qui ont un rle indpendant dun objet
spcifique. Elles excutent une action indpendante dune
instance particulire de la classe.
La dclaration dune mthode de classe se fait laide du
mot cl static.
Lappel dune telle mthode ne ncessite que le nom de la
classe correspondante.
Une mthode de classe ne peut utiliser que des variables de
classe et jamais des variables d'instance. Par contre, une mthode
d'instance peut accder aux deux catgories de variables.
Une mthode de classe ne peut avoir la mme signature
quune mthode dinstance
11
Exemple
classTest{

privatestaticint n; // champs de classe


privatefloatx; // champs usuel
//ici, on ne peut pas accder au champs x car champs usuel
// ici on peut accder au champs statique n
}
}

Test obj ;
Test.f() ; // appel la mthode de classe f de la classe Test
obj.f() ; // reste autoris, mais dconseill
public staticvoidf() { // mthode de classe
12
Excution
class Obj
{ privatestaticlong nb=0 ;
public Obj()
{ System.out.print ("++creationobjet Obj ; ") ;
nb ++;
System.out.println("il y en a maintenant " +nb) ;
}
publicstaticlong nbObj ()
{ return nb ;
}
}
public class TstObj2
{ public static void main (String args[])
{ Obj a ;
System.out.println("Main 1 : nb objets =" +Obj.nbObj() ) ;
a =new Obj() ;
System.out.println("Main 2 : nb objets =" +Obj.nbObj() ) ;
Obj b ;
System.out.println("Main 3 : nb objets =" +Obj.nbObj() ) ;
b =new Obj() ;
Obj c =new Obj() ;
System.out.println("Main 4 : nb objets =" +Obj.nbObj() ) ;
}
}
Excution
Main 1 : nb objets =0
++creationobjet Obj ; il y en a maintenant 1
Main 2 : nb objets =1
Main 3 : nb objets =1
++creationobjet Obj ; il y en a maintenant 2
++creationobjet Obj ; il y en a maintenant 3
Main 4 : nb objets =3
Exemple dutilisation dune mthode de classe
13
VII. Le mot cl final
Lattribut final indique que la valeur de la variable ne peut tre
modifie : on pourra lui donner une valeur une seule fois dans
le programme.
Variable dinstance final
Une variabledinstance final est une constante pour chaque
objet.
Une variable d'instancefinal peut ne pas tre initialise sa
dclaration mais elle doit avoir une valeur la sortie de tous
les constructeurs
14
Constantes de classe
Usage

Ce sont des variables de classes dclares avec le mot-cl final


Ce sont des constanteslies une classe
Elles sont crites en MAJ USCULES
Pour y accder, il faut utiliser non pas un identificateur dobjet
mais le nom de la classe
Exemple:
public class Galerie{
publicstaticfinal int MASSE_MAX = 150;
}
if (maVoiture.getWeightLimite() <=Galerie.MASSE_MAX)
{...}
15
Le mot rserv final
Une classe est dclare final lorsqu'on ne souhaite pas
qu'elle puisse tre sous-classe. Par consquent, ses
mthodes ne peuvent pas tre redfinies.
Une mthode est dclare final lorsqu'on ne souhaite
pas qu'elle puisse tre redfinie dans les classes
drives.
Une variable dclare final est une constante.
16
Classe java type
Une classe java types contient trois grands types de membres :
toujours dclarer les constructeurs aprs les attributs et
avant les autres mthodes.
Les constructeurs sont des mthodes particulires, vous devez
public class Rectangle {
// ( 1 ) A ttributs
private double L , l ;
// ( 2 ) Constructeurs
public Rectangle (double L , double l ) { . . . }
// ( 3 ) Mthodes
public double surface (double L , double l) { . . . }
}
Remarque
17