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
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ö:
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ö:
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ö:
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.