Méthodes statiques

images/whitebelt.png

Des méthodes d’instance comme toString() peuvent utiliser des variables d’instance soit pour consulter leur valeur soit pour les modifier. Toutefois il peut exister des "prestations" qui ne sont pas dépendantes de l'état d’un objet.

   double res = Math.sin(3.77) ;
   double autreRes = StrictMath.sin(7.33) ;

Ici le calcul d’un sinus par sin(valeur) n’est lié à aucun état d’un objet particulier (Il est simplement exécuté de manière différente par les deux classes Math et StrictMath). sin est une méthode de classe.

[Attention]Attention!

Il n’y a pas de fonction en Java: chaque demande de service doit être adressée à quelque chose: ce peut être un objet - par l’invocation d’une méthode d’instance- ou une classe - par l’invocation d’une méthode de classe-.

Si en Jshell nous avons eu l’illusion de créer une fonction en fait il s’agissait d’une méthode (rattachée à un objet implicite).

documentation de la méthode sin dans la classe Math : la méthode est déclarée static dans le code réalisant.

d’autres exemples de méthodes statiques (dans la classe System)

Méthodes d’instance/méthodes statiques: un exemple

documentation de la classe Integer. Cette classe est typique des classes "d’emballage" (wrapper class): chaque instance contient simplement un scalaire dont elle donne une vision "objet".

[Note]

On peut créer une instance d'Integer soit en invoquant un des constructeurs comme celui ci soit en invoquant une méthode statique "fabrique" (factory method).

Dans cette documentation il y a plusieurs méthodes toString: une est une méthode d’instance les autres des méthodes de classe.

   Integer valeur = Integer.valueOf(66) ;
   String sixSix = valeur.toString()  ; // méthode d'instance ->  "66"
   String unUn = Integer.toString(11) ; // méthode de classe ->  "11"

Remarquons qu’il y a deux méthodes statiques toString mais qu’elles ont des signatures différentes: on a ici une surcharge de méthodes.