Méthodes

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 : 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 : Autres modifiers, non traités :

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ée void, 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.