Le mot-clé ‘static’ en Java

Corentin
ELP-2018
Published in
4 min readDec 21, 2018

Dans certains langages de programmation orientés objets comme Java, le PHP ou le C++, nous pouvons faire appel à des mots-clefs afin d’ajouter des caractéristiques à nos différentes lignes de code, l’un d’eux est le mot-clé static.

Avant de plonger dans le cœur du sujet, prenons le temps d’introduire les langages de programmation orientés objets. Ces derniers définissent un type de programmation composé de classes ayant leurs propres méthodes, variables, constructeurs, etc. Elles peuvent interagir les unes avec les autres dans le but de créer le programme voulu. Pour les utiliser, nous avons besoin de les instancier, c’est-à-dire de créer un objet qui aura pour modèle la classe « génératrice ».

Les principaux cas d’utilisations

La variable

Exemple de variable static

Pour commencer prenons le cas d’une variable static comme le montre l’extrait de code java ci-dessus. Dans ce scénario, taille appartient à la classe Body. Pour accéder à cette donnée, nous n’avons pas besoin de renseigner le nom d’une instance contrairement à une variable non static, en effet il suffit d’écrire : NomClasse.NomVariable comme nous pouvons le voir sur l’extrait de code suivant.

Utilisation d’une variable static

Ici, nous augmentons de 1 la valeur de la variable taille de la classe Body.

Naturellement nous pouvons nous demander pourquoi avoir créé une variable static.

Comme dit un peu plus tôt la variable static sera liée à la classe et non à l’objet donc nous pouvons compter combien de fois celle-ci est appelée.

Évolution de la variable static taille

Donc à chaque fois que la classe Body sera instanciée, alors taille augmentera de 1. Sur l’image de droite nous avons créé deux objets, ainsi les différentes valeurs de taille seront respectivement 5 puis 6 lorsque l’instance a est créée puis 7 quand l’instance b est créée.

Notons que nous pouvons également appeler une variable static par : NomObjet.NomVariable, cependant, par convention nous passons toujours par le nom de la classe.

La méthode

Comme pour les variables nous pouvons également lier les méthodes d’un objet au mot-clé static. Elle sera accessible depuis les autres classes par la syntaxe : NomClass.NomMéthode(). Encore une fois la méthode appartient non pas à l’instance mais à la classe contenant la méthode.

Exemple d’une méthode static

La classe calcul() montrée ci-dessus possède une variable de type entier égale à la variable static taille. À la dernière ligne nous remarquons également que la méthode utilise une variable chaine égale à une variable dynamique comme le montre le this, mais elle apparaît en rouge car le code ne peut pas être compilé. En effet this.chaine n’est pas une variable static or une méthode static ne peut utiliser que des variables static.

La gestion de la mémoire

Avant rappelons quelque chose. Lorsque l’on instancie une classe, un espace mémoire va lui être dédié afin de stocker son contenu.

gestion simplifiée de la mémoire

Dans le cas d’un contenu static, il va être initialisé et stocké qu’une seule fois. Pour fonctionner malgré cela, la classe instanciée saura où aller chercher ses contenus static. Donc le fait de ne pas systématiquement recréer un espace mémoire permet un gain de performance non négligeable. Voilà à quoi cela sert donc de placer un code ou une classe en static, sauf que la classe ne pourra pas être instanciée. Les méthodes et variables static seront également dans un unique espace mémoire.

Pour conclure

Le mot-clé static permet d’abord de changer la visibilité en créant un lien unique dans l’espace mémoire. Ensuite la durée de vie est changée car le contenu static est directement initialisé et restera visible aussi longtemps que le programme fonctionne.

Grâce à lui certaines classes peuvent être destinées à ne pas être instanciées et servir de “boîte à outils”.

Bibliographie :

https://fr.wiktionary.org/wiki/variable_statique

http://nicolas.baudru.perso.luminy.univ-amu.fr/Ressources/PO_Java_cours8.pdf

https://www.javatpoint.com/static-keyword-in-java

https://www.geeksforgeeks.org/static-keyword-java/

--

--