Les méthodes en Java

Quand on commence à programmer à Java, il faut savoir qu'il existe plusieurs nouveaux concepts à apprendre: classes, méthodes, exceptions, constructeurs, variables et plus, et cela peut devenir envahissant. Donc, il est préférable d'apprendre doucement. Dans cet article, on va étudier les méthodes et comment appeler une méthode en Java.

Une méthode Java est équivalente à une fonction en langage C qui englobe un ensemble d'opérations dans un seul bloc dont le but est d'optimiser et réduire le code. Cette méthode peut être appelée à partir d'autres méthodes et quand c'est fait, toutes les méthodes à l'intérieur de cette méthode seront eux aussi appelées et exécutées. Par exemple quand vous appelez la méthode System.out.println(), le système exécute plusieurs opérations juste pour afficher un message dans la console.

Maintenant vous allez apprendre comment créer vos propres méthodes avec ou sans retour, appeler une méthode avec ou sans paramètres, et optimiser l'abstraction du code dans une méthode.

Création d'une méthode

Considérons l'exemple suivant pour comprendre la structure d'une méthode:

public static int nomDeMéthode(int a, int b) {
// corp de la méthode
int somme = a + b;
return somme;
}
- Le mot clé public signifie que la méthode elle même peut être appelée à partir de n'importe quel bloc, différents classes ou même de différents packages à condition que vous importez la classe appelante. Il y a trois autres mots clés qui peuvent remplacer public. Ceux sont protected et private. Si la méthode est protected, alors seulement cette classe et les classes inférieures qui héritent d'elle peuvent appeler la méthode. Si la méthode est private, alors la méthode peut être appelée seulement à l'intérieur de la classe. 

- Le deuxième mot clé, static signifie que la méthode appartient à la classe et à l'instance de la classe (objet). Les méthodes static doivent être appelées en utilisant le nom de la classe: "ExempleClasse.ExempleMethode()". Cependant, si le mot clé static n'est pas là, alors la méthode peut être appelée seulement à travers d'un objet. Si la classe a un constructeur (pour créer des objets), alors on peut instancier la classe en tapant ExempleObjet obj = new  ExempleObjet(); , et appeler la méthode avec "obj.ExempleMethode();".

- int est le type de retour de la fonction, dans ce cas la méthode est déclarée sous forme d'une fonction qui retourne après le traitement effectué un résultat entier. Le mot clé pour renvoyer le résultat est return.

- int a, int b sont la liste des paramètres qui vont être utilisés à l'intérieur de la méthode, par exemple on veut faire une opération d'addition de a et b et mettre le résultat dans une variable somme qui va être retourné en sortie avec l'instruction return somme;.

Exemple:
Voici un code pour comparer deux nombres et rendre la valeur maximale. La fonction prend deux paramètres nb1 et nb2 et retourne le maximum des deux:

public static int max(int a, int b) {
int max;
if(a>b)
max=a;
else
max=b;
return max;
}

Le mot clé void

Le mot void indique que la méthode ne retourne rien quand vous appeler la méthode. Si vous voulez une méthode pour retourner quelque chose, donc remplacez le mot void par le type de données de l'objet que vous voulez retourner. Ensuite ajouter le mot return plus l'objet.

Dans cet exemple on considère une procédure qui prend un int n comme paramètre et imprime la liste des nombres de 1 à n. Cette méthode est de type void et ne retourne pas une valeur.

public class main {
public static void main(String[] args) {
imprimer(5);
}

public static void imprimer(int n){
for(int i = 0; i < n; i++)
System.out.println(i);
}
}
Exécution:

0
1
2
3
4
Il faut noter que la méthode System.out.println() ne retourne rien parce qu'elle est de type void.

Comment appeler une méthode

Pour utiliser une méthode, il faut l'appeler. Il existe deux façons dans lesquelles une méthode est appelée. Le traitement d'un appel de méthode est simple. Quand un programme invoque une méthode, le contrôle est transféré à la méthode appelée. Après la fin de l'exécution de la méthode, le contrôle est retourné à l'appelant avec deux conditions:

1- L'instruction return est exécutée (fonction).
2- On atteint la parenthèse fermante sans rien retourner (procédure).

Vous pouvez utiliser ce que la fonction retourne comme montré dans cet exemple:

public class main {
public static void main(String[] args) {
int a, b;
a = 5;
b = 10;
int resultat = somme(a, b);
System.out.println("a+b = "+resultat);
}

public static int somme(int a, int b){
return a+b;
}
}
Exécution:

a+b = 15

Passage des paramètres par valeur

Les arguments qui sont passés doivent correspondent exactement à l'ordre des paramètres déclarés dans la méthode. Les paramètres peuvent être passés par valeur ou par référence.

Le passage des paramètres par valeur veut dire appeler une méthode avec un paramètre. Le programme suivant montre un exemple sur le passage par valeur. Les valeurs des arguments restent les mêmes après l'appel de la méthode.

public class main {
public static void main(String[] args) {
int a = 30;
int b = 45;

System.out.println("Avant la permutation (main), a = " + a
+ " b = " + b);

//invoquer la méthode permuter()
permuter(a, b);
System.out.println("Après la permutation (main), a = " + a
+ " b = " + b);
}

public static void permuter(int a, int b) {

System.out.println("Avant la permutation (méthode), a = " + a
+ " b = " + b);
// permuter a avec b
int c = a;
a = b;
b = c;

System.out.println("Après la permutation (méthode), a = " + a
+ " b = " + b);
}
}
Exécution:

Avant la permutation (main), a = 30 b = 45
Avant la permutation (méthode), a = 30 b = 45
Après la permutation (méthode), a = 45 b = 30
Après la permutation (main), a = 30 b = 45

Surcharge de méthode en java (Overloading)

Quand une classe contient deux ou plusieurs méthodes avec le même nom mais des paramètres différents, cela est connu comme un surcharge de méthode ou l'overloading. il est différent de l'overriding ou la méthode a le même nom, type, nombre de paramètres, etc.

Considérons l'exemple vu précédemment qui détermine le maximum entre deux integer. Disons qu'on veut déterminer le nombre maximal d'un type double. Le concept du surcharge va nous aider à créer deux ou plusieurs méthodes avec un nom identique, mais différents paramètres.

public class main {
public static void main(String[] args) {
int a, b;
a = 7;
b = 8;
System.out.println("max("+a+", "+ b+") = "+max(a, b));

double x,y;
x=1.5;
y=4.2;
System.out.println("max("+x+", "+ y+") = "+max(x, y));
}

public static int max(int a, int b) {
int max;
if(a>b)
max=a;
else
max=b;
return max;
}

public static double max(double a, double b) {
double max;
if(a>b)
max=a;
else
max=b;
return max;
}
}
Exécution:

max(7, 8) = 8
max(1.5, 4.2) = 4.2
Le surcharge de méthode rend le programme adaptable. Ici, les deux méthodes ont un nom identique, mais différents paramètres. Le nombre maximum des types integer et double est le résultat.