logo

Per què no es pot fer referència a una variable no estàtica des d'un context estàtic a Java

L'error no es pot fer referència a una variable no estàtica des d'un context estàtic a Java s'enfronten sobretot els principiants en el moment de la compilació del programa Java. El motiu pel qual es produeix aquest error és que utilitzen una variable membre no estàtica al mètode main(). Com que el mètode main() a Java és un mètode estàtic i s'invoca automàticament, no hem de crear un objecte per invocar-lo. Per entendre l'error, primer hem d'entendre el estàtica i no estàtica mètode en Java .

Mètode estàtic

En Java , els mètodes públics pertanyen a una instància de classe però si en parlem mètode estàtic , pertanyen a una classe no a una instància d'una classe. No cal crear una instància de la classe per invocar un mètode estàtic. El membre estàtic només pot accedir al membre de dades estàtiques i pot canviar-ne el valor.

Mètode no estàtic

Tots els mètodes sense tenir estàtica La paraula clau abans del nom del mètode s'anomena No estàtica mètodes. No cal crear una instància de la classe per accedir al mètode estàtic i a la variable estàtica. Els mètodes no estàtics s'utilitzen enllaços dinàmics o en temps d'execució. A diferència estàtica mètode, podem anul·lar el no estàtica mètode.

Creem un programa Java i generem el mateix error.

classe d'objectes en java

En l'exemple següent, hem declarat una variable privada nombre de tipus int abans del mètode main(). En el mètode main(), estem intentant augmentar el nombre en 1. Cal tenir en compte que el mètode main() és un mètode estàtic i la variable no és estàtica. Quan compilem el programa anterior, obtenim el mateix error, com hem mostrat a continuació.

StaticExample1.java

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

Sortida:

str a int
Per què no es pot fer referència a una variable no estàtica des d'un context estàtic a Java

Ara, anem a declarar la variable nombre com a estàtica i compilar el codi. Tingueu en compte que la variable i el mètode main() són estàtics.

StaticExample2.java

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

Sortida:

Per què no es pot fer referència a una variable no estàtica des d'un context estàtic a Java

El programa es compila i s'executa correctament.

Cada instància d'una variable no estàtica té un valor diferent i es crea quan l'operador new() inicialitza una instància d'un objecte. Les variables estàtiques es creen o s'inicialitzen quan es carrega la classe JVM .

Necessitem una instància d'un objecte per cridar la variable no estàtica. Podem crear molts objectes donant diferents valors a aquesta variable no estàtica o d'instància.

serveis web java

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); } } 

Sortida:

Per què no es pot fer referència a una variable no estàtica des d'un context estàtic a Java

En el programa anterior, tres objectes, var1, var2, var3 , es creen per a la classe variable i va assignar els tres valors diferents 12, 13, 14 per als objectes var1, var2 , i var3 , respectivament. Ara, el nombre propietat de cada objecte té el seu propi valor enter. Quan intentem augmentar el valor de la propietat del nombre cridant al mètode increment(), el compilador no entén per a quin valor de nombre el mètode hauria d'incrementar el valor. El compilador s'enfronta a l'error d'ambigüitat i llança l'error en temps de compilació no es pot fer referència a una variable no estàtica des d'un context estàtic .

Solució a l'Error

Hi ha una manera senzilla de resoldre el no es pot fer referència a una variable no estàtica des d'un context estàtic error. En el codi anterior, hem d'adreçar la variable no estàtica amb el nom de l'objecte. D'una manera senzilla, hem de crear un objecte de la classe per referir-nos a una variable no estàtica des d'un context estàtic. Es crea una nova còpia de totes les variables no estàtiques quan es crea una nova instància de variable. Així, podem accedir a aquestes variables utilitzant la referència de la nova instància de la classe. per exemple, considereu el següent programa Java.

com descarregar música

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 } } 

Sortida:

Per què no es pot fer referència a una variable no estàtica des d'un context estàtic a Java

Descripció

Al programa anterior, accedim a la propietat del número mitjançant el nom de la classe staticExample. Creem un objecte del nom de classe StaticExample prova i augmentar el valor del número utilitzant l'objecte de prova.