Introduction
La définition d'une méthode est constituée de :
- une en-tête définissant
- sa visibilité en
utilisant éventuellement l'un des spécificateurs
private,
protected ou
public
- une spécification éventuelle
static
qui en fait une méthode de classe
- une spécification éventuelle
final
qui en interdit la redéfinition
- le type de la valeur de retour (sauf pour les
constructeurs)
- le nom
- la liste des paramètres (types et noms)
- un corps contenant le code corrrespondant.
Les variables locales, qui seront allouées sur la pile
doivent nécessairement être initialisées avant d'être utilisées
dans une expression.
Par ailleurs, le compilateur refuse la réutilisation conflictuelle
d'identificateurs de variables locales (par contre une variable locale
peut avoir même nom qu'une variable d'instance de la classe :
il sera toujours possible d'y accéder via la référence symbolique
this
--> cat Corps.java
class C {
int m = 3;
void fonc( ){
int m;
for(int m=0; m<10; m++); // m est déjà utilié
m = this.m + 1;
System.out.println(m + " " + this.m);
}
}
public class Corps {
public static void main(String[] arg) {
C c = new C();
c.fonc();
}
}
--> javac Corps.java
Corps.java:5: Variable 'm' is already defined in this method.
for(int m = 0; m < 10; m++);
^
1 error
|
et après avoir occulté la ligne fautive;
--> javac Corps.java
--> java Corps
4 3
|
Définitions générales
- la signature d'une fonction
est constituée du type de sa valeur de retour, son nom et la
liste des types de ses paramètres ;
- le profil
d'une méthode est constitué de son nom et de la liste
des types des paramètres.
Invocations de méthodes
- une méthode d'instance de profil
fonc(T1 par1, ..., Tn parn)
définie dans la classe
C
est invoquée sous la forme
ref.fonc(arg1, ..., argn)
où ref
est une référence de la classe
C (ou d'une
classe dérivée) ;
- une méthode de classe (c'est-à-dire de spécification
static)
de profil
fonc(T1 par1 ,..., Tn parn)
définie dans la classe
C
peut également être invoquée sous la forme
C.fonc(arg1 ,..., argn)
Transmission des paramètres
Tous les paramètres sont transmis par valeur : cela
signifie que la valeur du paramètre d'appel constitue la valeur initiale
de la variable correspondante dans la liste
des paramètres formels qui est créée sur la pile à l'invocation de la méthode
--> cat Param.java
class A{
int a, b;
A(int a, int b){this.a = a; this.b = b;}
public String toString(){return "("+a+","+b+")";}
}
class B {
static void f(int a, int b){a++; b++; }
static void g(A ref){ref.a++; ref.b++;}
}
public class Param{
public static void main(String[] arg){
A a = new A(3, 4);
System.out.println(a);
B.f(a.a, a.b);
System.out.println(a);
B.g(a);
System.out.println(a);
}
}
--> java Param
(3,4) // valeur initiale des variables de l'objet
(3,4) // après invocation de f (types primitifs ... valeur)
(4,5) // après invocation de g (type référence)
|