En bref
En Java, les fonctions s’appellent des méthodes, car elles vivent toujours dans une classe : c’est la première particularité à intégrer, et elle découle de la nature profondément orientée objet du langage. Une méthode déclare tout : sa visibilité, son éventuel caractère static, son type de retour, void quand elle ne renvoie rien, son nom et ses paramètres typés, l’ensemble formant la signature, le contrat que le compilateur fait respecter à la lettre. La distinction entre méthodes statiques, appartenant à la classe, et méthodes d’instance, appartenant aux objets, structure tout le langage, du fameux main aux objets métier. S’y ajoutent la surcharge, plusieurs méthodes de même nom distinguées par leurs paramètres, la règle du passage par valeur, source du malentendu le plus classique sur les objets, et la documentation Javadoc. La modernité a enrichi le tableau : les lambdas et les références de méthodes ont apporté à Java le style fonctionnel, omniprésent depuis dans les traitements de collections.
Première surprise du nouvel arrivant : en Java, on ne dit pas fonction, on dit méthode, et cette nuance de vocabulaire cache toute la philosophie du langage. Les fonctions Java, puisque c’en est bien l’équivalent, sont typées, déclarées et disciplinées, et leur rigueur est précisément ce qui fait tenir les grands systèmes. Voici le guide pratique complet, en prolongement de comprendre une fonction, du guide apprendre le Java et du guide complet pour apprendre à coder.
Anatomie d’une méthode : la signature comme contrat
Une méthode Java se déclare en annonçant tout, et cette exhaustivité déroute avant de rassurer : public static int additionner(int a, int b) { return a + b; } énonce sa visibilité, public, accessible de partout, son appartenance, static, on y revient, son type de retour, int, un entier, son nom et ses paramètres, chacun typé. L’ensemble nom et paramètres forme la signature, et le mot contrat n’est pas une image : le compilateur vérifie chaque appel, nombre d’arguments, types compatibles, usage du retour, et refuse de produire le programme à la moindre incohérence, avec un message précis à la clé. C’est la grande différence d’expérience avec les langages souples : là où Python découvre l’erreur en l’exécutant, Java la bloque avant, la philosophie des langages compilés appliquée aux fonctions, et le débutant qui pestait contre le compilateur au premier mois le remercie au premier gros projet. Le type de retour void complète l’anatomie, pour les méthodes qui agissent sans rien renvoyer, afficher, enregistrer, et le return reste obligatoire partout ailleurs, sur tous les chemins d’exécution, le compilateur y veillant aussi.
Le mot-clé static, lui, trace la frontière la plus structurante du langage. Une méthode static appartient à la classe elle-même et s’appelle sans créer d’objet, Math.max(3, 7) en étant l’exemple quotidien : ce sont les méthodes outils, calculs, conversions, utilitaires, dont le fameux point d’entrée public static void main(String[] args), static précisément parce qu’il doit exister avant tout objet. Une méthode d’instance, sans static, appartient aux objets nés de la classe et travaille sur leurs données : compte.deposer(100) agit sur ce compte-là, la méthode accédant à ses attributs, éventuellement via le mot-clé this qui désigne l’objet courant. Cette distinction n’est pas un détail technique, c’est l’entrée dans la programmation orientée objet : en Java, la question n’est jamais seulement que fait cette méthode, mais à qui appartient-elle, à la classe outillage ou aux objets qu’elle décrit, et bien poser cette question, projet après projet, avec l’appui de comprendre une classe et un objet, est le vrai apprentissage des méthodes Java.
Surcharge, passage par valeur et documentation
La surcharge est l’élégance signature de Java : plusieurs méthodes peuvent porter le même nom dans une classe, pourvu que leurs paramètres diffèrent en nombre ou en types, et le compilateur choisit la bonne à chaque appel. La bibliothèque standard en use partout, println acceptant indifféremment entier, texte ou objet, et tes propres classes y gagnent des interfaces naturelles, calculerPrix avec ou sans remise, chercher par identifiant ou par nom ; la limite est de bon sens, les surcharges doivent faire la même chose conceptuellement, un même nom recouvrant des comportements étrangers étant un piège tendu aux collègues. À la surcharge s’ajoutent les subtilités utiles : les paramètres à nombre variable, int... valeurs, qui ramassent les arguments en tableau, l’équivalent local des variadiques des autres langages, et l’absence assumée de paramètres par défaut, que l’idiome Java compense justement par des surcharges en cascade, la version courte appelant la version complète avec les valeurs standard.
Vient alors la règle qui génère le plus de malentendus, et qu’il faut énoncer avec précision : Java passe tout par valeur, toujours. Pour les types primitifs, entiers, booléens, la méthode reçoit une copie, et modifier le paramètre ne touche jamais la variable de l’appelant. Pour les objets, la nuance est décisive : ce qui est copié, c’est la référence, la flèche vers l’objet, pas l’objet lui-même ; la méthode peut donc modifier l’objet pointé, ajouter dans la liste reçue, changer un attribut, et l’appelant verra ces modifications, mais réassigner le paramètre à un autre objet ne change rien au-dehors, la flèche copiée ayant seule bougé. Cette mécanique, cousine de celle qu’explique comprendre un pointeur, mérite dix minutes de tests dans un IDE, car elle éclaire mille comportements. Reste la documentation, institution du langage : le commentaire Javadoc, posé au-dessus de la méthode avec ses balises de paramètres et de retour, alimente l’aide contextuelle de l’éditeur et les documentations générées, et le pro se reconnaît à des Javadoc qui disent le pourquoi, les unités, les cas limites, pas la paraphrase du code.
Bonnes pratiques et modernité fonctionnelle
Les bonnes pratiques des méthodes Java prolongent les principes universels avec les accents du langage. La responsabilité unique et les noms parlants d’abord, verbe en camelCase, calculerTotal, envoyerRapport, la convention étant ici une loi sociale que tout l’écosystème respecte, dans l’esprit de bien nommer ses variables. La brièveté ensuite, servie par l’extraction facile qu’offrent les IDE, un bloc sélectionné devenant méthode nommée en un raccourci, le refactoring le plus rentable du quotidien. La gestion d’erreurs encore, où Java affiche sa singularité : les exceptions vérifiées, que le compilateur oblige à traiter ou à déclarer dans la signature même de la méthode, le contrat s’étendant aux échecs possibles, une discipline détaillée dans la gestion des erreurs. Et la visibilité minimale enfin : public réservé à ce qui doit l’être, private par défaut pour la cuisine interne, car chaque méthode exposée est une promesse qu’il faudra tenir dans le temps, la leçon d’architecture que l’héritage et les interfaces approfondiront.
La modernité a enfin offert à Java ce qui lui manquait : le style fonctionnel. Depuis Java 8, les lambdas écrivent des mini-fonctions anonymes à la volée, x -> x * 2, et les références de méthodes les abrègent encore, String::toUpperCase ; le véhicule de cette révolution s’appelle les streams, ces chaînes de traitement des collections où l’on filtre, transforme et agrège en déclarant quoi plutôt qu’en boucle comment, filter, map, collect se lisant comme une phrase. Le débutant n’a pas à en faire son premier chapitre, les méthodes classiques et la boucle restant le socle, mais il croisera ce style dans tout code récent et gagnera à l’apprivoiser tôt, par petites touches, un tri par lambda ici, un filtre là, les exercices Java s’y prêtant bien. Le fil rouge de l’apprentissage, lui, ne varie pas : écrire beaucoup de méthodes, petites, typées, nommées, documentées, dans de vrais projets qui les font collaborer, car c’est ainsi, contrat après contrat, que la rigueur java cesse d’être une contrainte pour devenir ce qu’elle est aux yeux des équipes qui l’ont choisie : une assurance collective sur la durée.
Questions fréquentes
Pourquoi dit-on méthode et pas fonction en Java ?
Parce qu’en Java, tout code vit dans une classe : une fonction y est donc toujours la méthode d’une classe ou de ses objets. La distinction recouvre celle entre méthodes statiques, appartenant à la classe, comme main, et méthodes d’instance, appartenant aux objets créés.
Que signifie void dans une méthode Java ?
C’est le type de retour des méthodes qui ne renvoient rien : elles agissent, affichent, enregistrent, modifient, sans produire de valeur. Toute autre méthode déclare un type de retour précis et doit exécuter un return compatible sur tous ses chemins, le compilateur y veille.
Java passe-t-il les objets par référence ?
Non : Java passe tout par valeur, mais pour les objets, la valeur copiée est la référence. La méthode peut donc modifier l’objet pointé, et l’appelant le verra, mais réassigner le paramètre à un autre objet n’a aucun effet au-dehors : seule la copie de la flèche a bougé.
C’est quoi la surcharge de méthodes ?
Plusieurs méthodes de même nom dans une classe, distinguées par le nombre ou les types de leurs paramètres : le compilateur choisit la bonne à chaque appel. C’est l’idiome Java pour offrir des variantes, et il compense l’absence de paramètres par défaut dans le langage.
Sources
Cet article a une vocation informative et pédagogique. Les plateformes, outils et formations éventuellement cités le sont à titre d’exemple ; compare plusieurs options avant de t’engager ou de payer.

