Définir une méthode
Une méthode est définie par sa signature, qui doit être unique au sein d'une classe.La signature d'une méthode est composée de :
- ses modifiers
- son nom
- le nombre, l'ordre, les types et les noms de ses paramètres
- le type de la valeur qu'elle renvoie
- les checked exceptions qu'elle est susceptible de lancer
modifiers type name ( paramlist ) [ throws exceptions ]
public static void myMethod(int param1, float param2) throws FileNotFoundException, FileSystemException{ ... }
modifiers type name ( paramlist ) [ throws exceptions ]
La signature est suivie par le corps de la méthode (une suite d'instructions entourée par des accolades).
Si la méthode est abstraite (si le mot-clé
abstract
fait partie de sa signature), le corps est remplacé par un point-virgule.
Polymorphisme ad'hoc
Une méthode doit avoir une signature unique au sein d'une classe, mais il peut exister plusieurs méthodes du même nom, ce qu'on appelle le polymorphisme ad'hoc ou overloading.C'est très fréquemment utilisé en java, par exemple la classe
java.lang.System
a une variable static nommée out
, qui est un objet de la classe java.io.PrintStream
. Cette classe possède plusieurs méthodes println()
, dont les signatures diffèrent par le type de l'argument à afficher.
Cela permet d'utiliser
System.out.println(maVariable)
sans se soucier du type de maVariable
.
Les modifiers
Liste de zéro ou plusieurs mots-clés.Modifiers traités dans ce cours :
-
abstract
: méthode abstraite, sans implémentation. -
final
: Ne peut pas être overridé dans les sous classes ; permet au compilateur de faire des optimisations ; les méthodes privées sont implicitement toutes final. -
public, protected, private
: indiquent la visibilité de la méthode ; l'absence de modifier désignant la visibilité désigne aussi une visibilité (cf plus loin). -
static
: Indique s'il s'agit d'une méthode de classe (static) ou d'instance (pas déclarée static).
-
native
: indiquent une méthode implémenté dans un autre langage (comme le C). Pas d'implémentation, les accolades sont remplacées par un;
-
strictfp
: lié à la manière dont java gère l'arithmétique en floating point. -
synchronized
: lié au multithread.
Les arguments
Comme déjà vu, les arguments sont une liste séparée par des virgules contenant le type et le nom des arguments.Le type des arguments n'est donc pas limité aux types primitifs, par ex
public void myMethod(int arg1, String arg2)
Liste d'arguments variables
java permet à une fonction d'avoir un nombre variable d'arguments, qui doivent être tous du même type.Les arguments variables doivent être placés en dernier ; on utilise
...
pour les définir.
Cette possibilité s'appelle varargs.
Exemple d'une fonction qui calcule le plus grand entier :
public static int max(int premier, int... lesAutres) { /* implementation */ }Java transforme à la compilation les arguments variables en tableau et voit la méthode comme :
public static int max(int premier, int[] lesAutres) { /* implementation */ }Dans la méthode, on peut donc utiliser l'argument variable comme un tableau :
public static int max(int premier, int... lesAutres) { int max = premier; for(int i : lesAutres) { if (i > max) max = i; } return max; }On peut utiliser la fonction avec autant d'arguments que l'on veut :
max(0) max(1, 2) max(16, 8, 4, 2, 1)(code dans Varargs.java)
A noter la fonction
public static main(String[] args)
peut être écrite public static void main(String... args)
(voir SignatureVarargs.java)
Retour d'une méthode
Si elle n'est pas déclaréevoid
, une méthode peut renvoyer un objet du type spécifié dans sa signature.
L'instruction
return
peut se trouver à n'importe quel endroit du corps de la méthode.
Si la méthode est déclarée
void
et qu'elle ne contient aucun return, elle s'exécute jusqu'au bout et retourne après avoir exécuté la dernière instruction.
L'exécution de la fonction peut aussi être interrompue par des instructions
throw
, ou si une exception survient.