logo

Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

Feilen ikke-statisk variabel kan ikke refereres fra en statisk kontekst i Java er for det meste møtt av nybegynnere på tidspunktet for kompilering av Java-program. Grunnen til å oppstå denne feilen er at de bruker en ikke-statisk medlemsvariabel i main()-metoden. Fordi main()-metoden i Java er en statisk metode og den påkalles automatisk, trenger vi ikke å lage et objekt for å påkalle det. For å forstå feilen, bør vi først forstå statisk og ikke-statisk metode i Java .

Statisk metode

I Java , offentlige metoder tilhører en forekomst av klasse, men hvis vi snakker om statisk metode , de tilhører en klasse ikke til en forekomst av en klasse. Det er ikke nødvendig å lage en forekomst av klassen for å påkalle en statisk metode. Det statiske medlemmet har kun tilgang til det statiske datamedlemmet og kan endre verdien.

Ikke-statisk metode

Alle metodene uten å ha statisk nøkkelord før metodenavn refereres til som Ikke-statisk metoder. Det er ikke nødvendig å opprette en forekomst av klassen for å få tilgang til den statiske metoden og den statiske variabelen. De ikke-statiske metodene brukes dynamisk eller kjøretidsbinding. I motsetning til statisk metoden kan vi overstyre ikke-statisk metode.

La oss lage et Java-program og generere den samme feilen.

sorteringsarray i java

I følgende eksempel har vi deklarert en privat variabel Antall av typen int før main()-metoden. I main()-metoden prøver vi å øke tallet med 1. Det skal bemerkes at main()-metoden er en statisk metode og variabelen er ikke statisk. Når vi kompilerer programmet ovenfor, får vi samme feil, som vi har vist nedenfor.

StaticExample1.java

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

Produksjon:

nettverksoperativsystem
Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

La oss nå erklære variabelen Antall som statisk og kompiler koden. Merk at variabel og main()-metoden begge er statiske.

StaticExample2.java

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

Produksjon:

Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

Programmet kompilerer og kjører vellykket.

Hver forekomst av en ikke-statisk variabel har en annen verdi og opprettes når new()-operatoren initialiserer en forekomst av et objekt. De statiske variablene opprettes eller initialiseres når klassen lastes inn JVM .

Vi trenger en forekomst av et objekt for å kalle den ikke-statiske variabelen. Vi kan lage mange objekter ved å gi forskjellige verdier til den ikke-statiske eller instansvariabelen.

if uttalelse java

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

Produksjon:

Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

I programmet ovenfor, tre objekter, var1, var2, var3 , er opprettet for klassen variabel og tildelt de tre forskjellige verdiene 12, 13, 14 for objektene var1, var2 , og var3 , henholdsvis. Nå, den Antall egenskapen til hvert objekt har sin egen heltallsverdi. Når vi prøver å øke verdien til number-egenskapen ved å kalle increment()-metoden, forstår ikke kompilatoren for hvilken verdi av tall metoden skal øke verdien for. Kompilatoren står overfor tvetydighetsfeilen og kaster kompileringstidsfeilen ikke-statisk variabel kan ikke refereres fra en statisk kontekst .

Løsning på feilen

Det er en enkel måte å løse problemet på ikke-statisk variabel kan ikke refereres fra en statisk kontekst feil. I koden ovenfor må vi adressere den ikke-statiske variabelen med objektnavnet. På en enkel måte må vi lage et objekt av klassen for å referere til en ikke-statisk variabel fra en statisk kontekst. En ny kopi av alle de ikke-statiske variablene opprettes når en ny forekomst av variabelen opprettes. Så vi kan få tilgang til disse variablene ved å bruke referansen til den nye forekomsten av klassen. vurdere for eksempel følgende Java-program.

java par

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

Produksjon:

Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

Beskrivelse

I programmet ovenfor får vi tilgang til number-egenskapen ved å bruke klassenavnet statisk Eksempel. Vi lager et objekt med StaticExample-klassenavnet test og øke nummerets verdi ved å bruke testobjektet.