logo

De ce variabila non-statică nu poate fi referită dintr-un context static în Java

Eroarea variabila non-statică nu poate fi referită dintr-un context static în Java se confruntă în cea mai mare parte de către începători la momentul compilării programului Java. Motivul pentru care apare această eroare este că folosesc o variabilă membru non-statică în metoda main(). Deoarece metoda main() din Java este o metodă statică și este invocată automat, nu trebuie să creăm un obiect pentru a o invoca. Pentru a înțelege eroarea, mai întâi ar trebui să înțelegem static și nestatic metoda în Java .

Metoda statică

În Java , metodele publice aparțin unei instanțe de clasă dar dacă vorbim despre metoda statica , ele aparțin unei clase, nu unei instanțe a unei clase. Nu este nevoie de a crea o instanță a clasei pentru a invoca o metodă statică. Membrul static poate accesa numai membrul de date static și își poate schimba valoarea.

Metoda non-statică

Toate metodele fără a avea static cuvântul cheie înainte de numele metodei sunt denumite Non-static metode. Nu este nevoie să creați o instanță a clasei pentru a accesa metoda statică și variabila statică. Metodele non-statice sunt utilizate de legare dinamică sau runtime. Spre deosebire de static metoda, putem trece peste nestatic metodă.

Să creăm un program Java și să generăm aceeași eroare.

shweta tiwari

În exemplul următor, am declarat o variabilă privată număr de tip int înaintea metodei main(). În metoda main() încercăm să creștem numărul cu 1. Este de remarcat că metoda main() este o metodă statică și variabila nu este statică. Când compilam programul de mai sus, obținem aceeași eroare, așa cum am arătat mai jos.

StaticExample1.java

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

Ieșire:

java public vs privat
De ce variabila non-statică nu poate fi referită dintr-un context static în Java

Acum, să declarăm variabila număr ca static și compilați codul. Rețineți că metoda variabilă și main() sunt ambele statice.

StaticExample2.java

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

Ieșire:

De ce variabila non-statică nu poate fi referită dintr-un context static în Java

Programul se compilează și rulează cu succes.

programe python

Fiecare instanță a unei variabile non-statice are o valoare diferită și este creată atunci când operatorul new() inițializează o instanță a unui obiect. Variabilele statice sunt create sau inițializate atunci când clasa se încarcă în JVM .

Avem nevoie de o instanță a unui obiect pentru apelarea variabilei non-statice. Putem crea multe obiecte dând valori diferite acelei variabile non-statice sau de instanță.

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

Ieșire:

De ce variabila non-statică nu poate fi referită dintr-un context static în Java

În programul de mai sus, trei obiecte, var1, var2, var3 , sunt create pentru clasă variabil și a atribuit cele trei valori diferite 12, 13, 14 pentru obiecte var1, var2 , și var3 , respectiv. Acum număr proprietatea fiecărui obiect are propria sa valoare întreagă. Când încercăm să creștem valoarea proprietății numere apelând metoda increment(), compilatorul nu înțelege pentru ce valoare a numărului metoda ar trebui să incrementeze valoarea. Compilatorul se confruntă cu eroarea de ambiguitate și aruncă eroarea de compilare variabila non-statică nu poate fi referită dintr-un context static .

Soluție la Eroare

Există o modalitate simplă de a rezolva problema variabila non-statică nu poate fi referită dintr-un context static eroare. În codul de mai sus, trebuie să ne adresam variabilei non-statice cu numele obiectului. Într-un mod simplu, trebuie să creăm un obiect al clasei pentru a se referi la o variabilă non-statică dintr-un context static. O nouă copie a tuturor variabilelor non-statice este creată atunci când este creată o nouă instanță de variabilă. Deci, putem accesa aceste variabile folosind referința noii instanțe a clasei. de exemplu, luați în considerare următorul program Java.

indicator în 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 } } 

Ieșire:

De ce variabila non-statică nu poate fi referită dintr-un context static în Java

Descriere

În programul de mai sus, accesăm proprietatea număr utilizând numele clasei staticExample. Creăm un obiect cu numele clasei StaticExample Test și creșteți valoarea numărului prin utilizarea obiectului de testare.