logo

Miksi ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa

Virhe ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa kohtaavat enimmäkseen aloittelijat Java-ohjelmaa käännettäessä. Syy tähän virheeseen on, että he käyttävät ei-staattista jäsenmuuttujaa main()-metodissa. Koska Java:n main()-metodi on staattinen menetelmä ja se kutsutaan automaattisesti, meidän ei tarvitse luoda objektia kutsuaksemme sitä. Ymmärtääksemme virheen, meidän on ensin ymmärrettävä staattinen ja ei-staattinen menetelmä Javassa .

Staattinen menetelmä

Sisään Java , julkiset menetelmät kuuluvat luokan esiintymään, mutta jos puhumme staattinen menetelmä , ne kuuluvat luokkaan, eivät luokan esiintymään. Ei ole tarvetta luoda luokasta esiintymää staattisen menetelmän kutsumiseksi. Staattisella jäsenellä on pääsy vain staattiseen datajäseneen ja se voi muuttaa sen arvoa.

Ei-staattinen menetelmä

Kaikki menetelmät ilman staattinen avainsanaa ennen menetelmän nimeä kutsutaan nimellä Ei-staattinen menetelmiä. Staattisen menetelmän ja staattisen muuttujan käyttämiseksi ei tarvitse luoda luokasta esiintymää. Ei-staattisia menetelmiä käytetään dynaamisesti tai ajonaikaisesti. Toisin kuin staattinen menetelmällä, voimme ohittaa ei-staattinen menetelmä.

Luodaan Java-ohjelma ja luodaan sama virhe.

int char javaan

Seuraavassa esimerkissä olemme ilmoittaneet yksityisen muuttujan määrä int ennen main()-metodia. Main()-menetelmässä yritämme kasvattaa lukua yhdellä. On huomattava, että main()-menetelmä on staattinen menetelmä ja muuttuja ei ole staattinen. Kun käännämme yllä olevan ohjelman, saamme saman virheen, kuten olemme osoittaneet alla.

StaticExample1.java

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

Lähtö:

pino java
Miksi ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa

Nyt julistetaan muuttuja määrä staattisena ja käännä koodi. Huomaa, että muuttuja ja main()-metodi ovat molemmat staattisia.

StaticExample2.java

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

Lähtö:

Miksi ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa

Ohjelma käännetään ja suoritetaan onnistuneesti.

Jokaisella ei-staattisen muuttujan ilmentymällä on eri arvo, ja se luodaan, kun new()-operaattori alustaa objektin ilmentymän. Staattiset muuttujat luodaan tai alustetaan, kun luokka latautuu JVM .

Tarvitsemme objektin esiintymän ei-staattisen muuttujan kutsumiseksi. Voimme luoda monia objekteja antamalla eri arvoja tälle ei-staattiselle tai esiintymämuuttujalle.

ohjelmistotestauksen tyypit

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

Lähtö:

Miksi ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa

Yllä olevassa ohjelmassa kolme objektia, var1, var2, var3 , on luotu luokkaa varten muuttuja ja määritti kohteille kolme eri arvoa 12, 13, 14 var1, var2 , ja var3 , vastaavasti. Nyt määrä Jokaisella objektilla on oma kokonaislukuarvonsa. Kun yritämme kasvattaa numero-ominaisuuden arvoa kutsumalla increment()-menetelmää, kääntäjä ei ymmärrä, minkä luvun arvoa varten menetelmän arvoa tulisi kasvattaa. Kääntäjä kohtaa epäselvyysvirheen ja heittää käännösaikavirheen ei-staattiseen muuttujaan ei voida viitata staattisesta kontekstista .

Ratkaisu Virheeseen

On yksi yksinkertainen tapa ratkaista ei-staattiseen muuttujaan ei voida viitata staattisesta kontekstista virhe. Yllä olevassa koodissa meidän on osoitettava ei-staattinen muuttuja kohteen nimellä. Yksinkertaisella tavalla meidän on luotava luokan objekti viittaamaan ei-staattiseen muuttujaan staattisesta kontekstista. Uusi kopio kaikista ei-staattisista muuttujista luodaan, kun uusi muuttujan esiintymä luodaan. Joten voimme käyttää näitä muuttujia käyttämällä luokan uuden esiintymän viittausta. harkitse esimerkiksi seuraavaa Java-ohjelmaa.

harmaa koodi

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

Lähtö:

Miksi ei-staattista muuttujaa ei voida viitata staattisesta kontekstista Javassa

Kuvaus

Yllä olevassa ohjelmassa pääsemme numeroominaisuuteen käyttämällä luokan nimeä staattinenEsimerkki. Luomme StaticExample-luokan nimen objektin testata ja lisää numeron arvo käyttämällä testiobjektia.