logo

Zašto se nestatička varijabla ne može referencirati iz statičkog konteksta u Javi

Greška nestatička varijabla ne može se referencirati iz statičkog konteksta u Javi s kojim se uglavnom suočavaju početnici u vrijeme kompilacije Java programa. Razlog za pojavu ove pogreške je taj što koriste nestatičku varijablu člana u metodi main(). Budući da je main() metoda u Javi statična metoda i poziva se automatski, ne moramo kreirati objekt da bismo je pozvali. Da bismo razumjeli pogrešku, prvo bismo trebali razumjeti statički i nestatičan metoda u Javi .

Statička metoda

U Java , javne metode pripadaju instanci klase, ali ako govorimo o statička metoda , pripadaju klasi, a ne instanci klase. Nema potrebe za stvaranjem instance klase za pozivanje statičke metode. Statički član može pristupiti samo statičkom podatkovnom članu i može promijeniti njegovu vrijednost.

Nestatička metoda

Sve metode bez potrebe statički ključna riječ prije naziva metode naziva se Nestatičan metode. Nema potrebe za stvaranjem instance klase za pristup statičkoj metodi i statičkoj varijabli. Nestatičke metode koriste se dinamičkim ili runtime vezanjem. Za razliku od statički metodom, možemo nadjačati nestatičan metoda.

Kreirajmo Java program i generirajmo istu grešku.

dugo do int java

U sljedećem primjeru smo deklarirali privatnu varijablu broj tipa int prije metode main(). U metodi main() pokušavamo povećati broj za 1. Treba napomenuti da je metoda main() statična metoda i da varijabla nije statična. Kada prevedemo gornji program, dobivamo istu pogrešku, kao što je prikazano u nastavku.

StaticExample1.java

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

Izlaz:

javascript onclick
Zašto se nestatička varijabla ne može referencirati iz statičkog konteksta u Javi

Sada, deklarirajmo varijablu broj kao statički i prevesti kod. Imajte na umu da su i varijabla i main() metoda statične.

StaticExample2.java

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

Izlaz:

Zašto se nestatička varijabla ne može referencirati iz statičkog konteksta u Javi

Program se uspješno kompilira i izvodi.

godinamjesec

Svaka instanca nestatičke varijable ima različitu vrijednost i kreira se kada operator new() inicijalizira instancu objekta. Statičke varijable se stvaraju ili inicijaliziraju kada se klasa učita JVM .

Trebamo instancu objekta za pozivanje nestatičke varijable. Možemo stvoriti mnoge objekte davanjem različitih vrijednosti toj nestatičkoj varijabli ili varijabli instance.

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

Izlaz:

Zašto se nestatička varijabla ne može referencirati iz statičkog konteksta u Javi

U gornjem programu tri objekta, var1, var2, var3 , stvoreni su za klasu varijabla i dodijelio tri različite vrijednosti 12, 13, 14 za objekte var1, var2 , i var3 , odnosno. Sada, broj svojstvo svakog objekta ima vlastitu cjelobrojnu vrijednost. Kada pokušamo povećati vrijednost svojstva broja pozivanjem metode increment(), prevodilac ne razumije za koju bi vrijednost broja metoda trebala povećati vrijednost. Prevodilac se suočava s pogreškom dvosmislenosti i izbacuje pogrešku u vrijeme prevođenja nestatička varijabla ne može se referencirati iz statičkog konteksta .

Rješenje za grešku

Postoji jedan jednostavan način rješavanja nestatička varijabla ne može se referencirati iz statičkog konteksta greška. U gornjem kodu, moramo adresirati nestatičku varijablu s imenom objekta. Na jednostavan način, moramo stvoriti objekt klase koji će se odnositi na nestatičku varijablu iz statičkog konteksta. Nova kopija svih nestatičkih varijabli stvara se kada se kreira nova instanca varijable. Dakle, ovim varijablama možemo pristupiti korištenjem reference nove instance klase. na primjer, razmotrite sljedeći Java program.

pokazivač u c

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

Izlaz:

Zašto se nestatička varijabla ne može referencirati iz statičkog konteksta u Javi

Opis

U gornjem programu svojstvu broja pristupamo korištenjem naziva klase staticExample. Stvaramo objekt naziva klase StaticExample test i povećati vrijednost broja korištenjem ispitnog objekta.