Java Static Expliqué : Variables, Méthodes et Blocs – Exemples Pratiques
En Java, le mot-clé static apparaît dans trois contextes distincts : variables statiques, méthodes statiques et blocs statiques. Chacun joue un rôle unique dans le cycle de vie d'une classe et de ses instances.
Variables Statiques en Java
Une variable statique est un champ de niveau classe initialisé une seule fois lors du premier chargement de la classe. Contrairement aux variables d'instance, une seule copie d'une variable statique est partagée par tous les objets de cette classe.
- Une seule copie existe, partagée entre toutes les instances.
- Accessible directement via
NomClasse.nomVariablesans créer d'objet. - Initialisée avant tout champ d'instance.
Syntaxe :
public static int compteur;
Méthodes Statiques en Java
Les méthodes statiques appartiennent à la classe plutôt qu'à une instance particulière. Elles peuvent être invoquées sans créer d'objet et ne peuvent accéder qu'aux données statiques.
- Peuvent appeler d'autres méthodes statiques mais pas des méthodes d'instance.
- Invoquées avec
NomClasse.nomMethode(). - Ne peuvent pas utiliser
thisousupercar elles ne sont pas liées à une instance.
Toutes les méthodes main sont statiques pour que la JVM puisse lancer une application avant que tout objet n'existe.
Exemple Pratique : Utilisation de Variables et Méthodes Statiques
Voici un programme simple démontrant comment un compteur statique est partagé entre plusieurs objets Etudiant.
public class Demo {
public static void main(String[] args) {
Etudiant s1 = new Etudiant();
s1.showData();
Etudiant s2 = new Etudiant();
s2.showData();
// Etudiant.b++; // décommenter pour modifier le compteur
// s1.showData();
}
}
class Etudiant {
int a; // variable d'instance, par défaut 0
static int b; // compteur statique, initialisé à 0 une seule fois
Etudiant() {
b++; // incrémente le compteur à chaque création d'Etudiant
}
public void showData() {
System.out.println("Valeur de a = " + a);
System.out.println("Valeur de b = " + b);
}
}
Compilez et exécutez avec java Demo pour voir la sortie suivante :
Le diagramme ci-dessous illustre comment les variables de référence et les objets sont créés, et comment la variable statique b est partagée entre les instances.
Pour accéder à la variable statique depuis l'extérieur de la classe, utilisez NomClasse.nomVariable :
Etudiant.b++; // incrémente le compteur partagé
s1.showData(); // affichera la valeur mise à jour de b
Tenter d'accéder à une variable d'instance depuis un contexte statique entraîne une erreur de compilation :
error: non-static variable a cannot be referenced from a static context
a++;
Cela se produit car les méthodes statiques ne peuvent pas interagir directement avec les champs d'instance.
Blocs Statiques en Java
Un bloc statique est un bloc de code spécial qui s'exécute une seule fois lorsque la classe est chargée pour la première fois dans la JVM. Il est idéal pour initialiser des champs statiques nécessitant plus qu'une simple affectation.
class Test {
static int a;
static int b;
static {
a = 10;
b = 20;
}
}
L'exécution du programme suivant démontre la sortie d'un bloc statique :
public class Demo {
static int a;
static int b;
static {
a = 10;
b = 20;
}
public static void main(String[] args) {
System.out.println("Valeur de a = " + a);
System.out.println("Valeur de b = " + b);
}
}
Sortie :
Valeur de a = 10 Valeur de b = 20
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser la gestion d'exceptions Java : try, catch, finally, throw et throws expliqués
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression