Variables locales — déclarées et existant uniquement dans le corps d'une méthode ou d'un bloc, ne s'initialisent pas automatiquement. L'utilisation d'une variable locale non initialisée entraîne une erreur de compilation.
Variables d'instance (champs, non static) — appartiennent à chaque objet séparément, s'initialisent lors de la création d'une instance d'objet.
Variables statiques (champs static) — communes à toutes les instances de la classe, existent en un seul exemplaire pour toute la classe. Leur modification dans un objet est visible dans tous les autres objets de cette classe.
public class Example { private int instanceVar; // variable d'instance private static int staticVar; // variable statique public void foo() { int localVar = 0; // variable locale } }
Les variables statiques peuvent-elles être privées et comment sont-elles visibles entre différentes instances de la classe ?
Réponse : Oui, les variables statiques peuvent être privées. Leur modification se reflète pour toutes les instances de la classe, car elles appartiennent à la classe et non à l'objet.
public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }
La création de plusieurs instances de MyClass augmentera le même compteur.
Histoire
Dans une application d'entreprise, un développeur a erronément placé l'état de l'utilisateur dans un champ static. Cela a conduit à ce que les utilisateurs "voient" les données des uns et des autres dans un environnement multijoueur.
Histoire
Lors de l'écriture d'une application multithread, une variable d'instance a été utilisée dans une méthode static sans synchronisation appropriée. Cela a créé des courses de données et des résultats inattendus.
Histoire
Un développeur a décidé d'utiliser une variable locale au lieu d'un champ de classe pour stocker un résultat intermédiaire. La variable était détruite après la sortie de la méthode, et le programme renvoyait toujours null, ce qui n'a pas été détecté immédiatement lors des tests.