logo

Pourquoi une variable non statique ne peut pas être référencée à partir d'un contexte statique en Java

L'erreur la variable non statique ne peut pas être référencée à partir d'un contexte statique en Java est principalement rencontré par les débutants au moment de la compilation du programme Java. La raison de cette erreur est qu’ils utilisent une variable membre non statique dans la méthode main(). Étant donné que la méthode main() en Java est une méthode statique et qu’elle est invoquée automatiquement, nous n’avons pas besoin de créer un objet pour l’invoquer. Pour comprendre l'erreur, nous devons d'abord comprendre le statique et non statique méthode en Java .

Méthode statique

Dans Java , les méthodes publiques appartiennent à une instance de classe mais si on parle de méthode statique , ils appartiennent à une classe et non à une instance d'une classe. Il n'est pas nécessaire de créer une instance de la classe pour appeler une méthode statique. Le membre statique peut accéder uniquement aux données membres statiques et peut modifier sa valeur.

Méthode non statique

Toutes les méthodes sans avoir statique mot-clé avant le nom de la méthode sont appelés Non statique méthodes. Il n'est pas nécessaire de créer une instance de la classe pour accéder à la méthode statique et à la variable statique. Les méthodes non statiques sont utilisées avec une liaison dynamique ou d'exécution. Contrairement à statique méthode, nous pouvons remplacer la non statique méthode.

Créons un programme Java et générons la même erreur.

démarque des notes de bas de page

Dans l'exemple suivant, nous avons déclaré une variable privée nombre de type int avant la méthode main(). Dans la méthode main(), nous essayons d'incrémenter le nombre de 1. Il est à noter que la méthode main() est une méthode statique et que la variable n'est pas statique. Lorsque nous compilons le programme ci-dessus, nous obtenons la même erreur, comme nous l'avons montré ci-dessous.

StaticExample1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Sortir:

conversion de type et conversion en Java
Pourquoi une variable non statique ne peut pas être référencée à partir d'un contexte statique en Java

Maintenant, déclarons la variable nombre comme statique et compiler le code. Notez que la variable et la méthode main() sont toutes deux statiques.

StaticExample2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Sortir:

Pourquoi une variable non statique ne peut pas être référencée à partir d'un contexte statique en Java

Le programme se compile et s'exécute avec succès.

Chaque instance d'une variable non statique a une valeur différente et est créée lorsque l'opérateur new() initialise une instance d'un objet. Les variables statiques sont créées ou initialisées lors du chargement de la classe dans JVM .

Nous avons besoin d'une instance d'un objet pour appeler la variable non statique. Nous pouvons créer de nombreux objets en donnant différentes valeurs à cette variable non statique ou d'instance.

commentaire PowerShell multiligne

StaticExample3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Sortir:

Pourquoi une variable non statique ne peut pas être référencée à partir d'un contexte statique en Java

Dans le programme ci-dessus, trois objets, variable1, variable2, variable3 , sont créés pour la classe variable et attribué les trois valeurs différentes 12, 13, 14 pour les objets variable1, variable2 , et var3 , respectivement. Maintenant le nombre La propriété de chaque objet a sa propre valeur entière. Lorsque nous essayons d'incrémenter la valeur de la propriété number en appelant la méthode incrément(), le compilateur ne comprend pas pour quelle valeur de nombre la méthode doit incrémenter la valeur. Le compilateur fait face à l'erreur d'ambiguïté et renvoie l'erreur de compilation la variable non statique ne peut pas être référencée à partir d'un contexte statique .

Solution à l'erreur

Il existe un moyen simple de résoudre le la variable non statique ne peut pas être référencée à partir d'un contexte statique erreur. Dans le code ci-dessus, nous devons adresser la variable non statique avec le nom de l'objet. De manière simple, nous devons créer un objet de la classe pour faire référence à une variable non statique à partir d'un contexte statique. Une nouvelle copie de toutes les variables non statiques est créée lorsqu'une nouvelle instance de variable est créée. Ainsi, nous pouvons accéder à ces variables en utilisant la référence de la nouvelle instance de la classe. par exemple, considérons le programme Java suivant.

Java est vide

StaticExample4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Sortir:

Pourquoi une variable non statique ne peut pas être référencée à partir d'un contexte statique en Java

Description

Dans le programme ci-dessus, nous accédons à la propriété number en utilisant le nom de la classe Exemple statique. Nous créons un objet du nom de la classe StaticExample test et incrémenter le la valeur du nombre en utilisant l'objet de test.