Napaka na nestatično spremenljivko se ni mogoče sklicevati iz statičnega konteksta v Javi s katerim se večinoma srečujejo začetniki v času prevajanja programa Java. Razlog za pojav te napake je, da uporabljajo nestatično spremenljivko člana v metodi main(). Ker je metoda main() v Javi statična metoda in se prikliče samodejno, nam ni treba ustvariti predmeta, da bi jo priklicali. Da bi razumeli napako, bi morali najprej razumeti statična in nestatično metoda v Javi .
Statična metoda
notri Java , javne metode pripadajo primerku razreda, če pa govorimo o statična metoda , pripadajo razredu in ne primerku razreda. Za priklic statične metode ni treba ustvariti primerka razreda. Statični član lahko dostopa samo do statičnega podatkovnega člana in lahko spremeni njegovo vrednost.
Nestatična metoda
Vse metode brez statična ključna beseda pred imenom metode se imenujejo Nestatično metode. Za dostop do statične metode in statične spremenljivke ni treba ustvariti primerka razreda. Nestatične metode uporabljajo dinamično ali izvajalno vezavo. Za razliko od statična metodo, lahko preglasimo nestatično metoda.
Ustvarimo program Java in ustvarimo isto napako.
css prvi otrok
V naslednjem primeru smo deklarirali zasebno spremenljivko število tipa int pred metodo main(). V metodi main() poskušamo število povečati za 1. Opozoriti je treba, da je metoda main() statična metoda in spremenljivka ni statična. Ko prevedemo zgornji program, dobimo isto napako, kot smo jo prikazali spodaj.
StaticExample1.java
public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Izhod:
javna proti zasebni java
Zdaj pa deklarirajmo spremenljivko število kot statično in prevedite kodo. Upoštevajte, da sta spremenljivka in metoda main() statični.
StaticExample2.java
class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Izhod:
Program se uspešno prevede in zažene.
Vsak primerek nestatične spremenljivke ima drugačno vrednost in se ustvari, ko operator new() inicializira primerek predmeta. Statične spremenljivke so ustvarjene ali inicializirane, ko se razred naloži JVM .
Za klic nestatične spremenljivke potrebujemo primerek objekta. Ustvarimo lahko veliko objektov tako, da tej nestatični spremenljivki ali spremenljivki primerka damo različne vrednosti.
primeri java kode
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); } }
Izhod:
V zgornjem programu so trije objekti, var1, var2, var3 , so ustvarjeni za razred spremenljivka in dodelil tri različne vrednosti 12, 13, 14 za predmete var1, var2 , in var3 , oz. Zdaj pa število lastnost vsakega predmeta ima lastno celoštevilsko vrednost. Ko poskušamo povečati vrednost lastnosti števila s klicem metode increment(), prevajalnik ne razume, za katero vrednost števila bi morala metoda povečati vrednost. Prevajalnik se sooči z napako dvoumnosti in vrže napako v času prevajanja na nestatično spremenljivko se ni mogoče sklicevati iz statičnega konteksta .
Rešitev za napako
Obstaja en preprost način za rešitev na nestatično spremenljivko se ni mogoče sklicevati iz statičnega konteksta napaka. V zgornji kodi moramo nasloviti nestatično spremenljivko z imenom objekta. Na preprost način moramo ustvariti objekt razreda, ki se bo nanašal na nestatično spremenljivko iz statičnega konteksta. Ko je ustvarjen nov primerek spremenljivke, se ustvari nova kopija vseh nestatičnih spremenljivk. Torej lahko do teh spremenljivk dostopamo z uporabo sklicevanja na nov primerek razreda. na primer razmislite o naslednjem programu Java.
skrite aplikacije
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 } }
Izhod:
Opis
V zgornjem programu dostopamo do lastnosti števila z uporabo imena razreda staticExample. Ustvarimo objekt z imenom razreda StaticExample test in povečati vrednost števila z uporabo testnega objekta.