logo

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

Fejlen ikke-statisk variabel kan ikke refereres fra en statisk kontekst i Java er for det meste konfronteret med begyndere på tidspunktet for kompilering af Java-program. Årsagen til at denne fejl opstår er, at de bruger en ikke-statisk medlemsvariabel i main()-metoden. Fordi main()-metoden i Java er en statisk metode, og den påkaldes automatisk, behøver vi ikke at oprette et objekt for at påkalde det. For at forstå fejlen skal vi først forstå statisk og ikke-statisk metode i Java .

Statisk metode

I Java , offentlige metoder tilhører en forekomst af klasse, men hvis vi taler om statisk metode , de tilhører en klasse og ikke en forekomst af en klasse. Der er ikke behov for at oprette en forekomst af klassen for at påberåbe en statisk metode. Det statiske medlem kan kun få adgang til det statiske datamedlem og kan ændre dets værdi.

Ikke-statisk metode

Alle metoderne uden at have statisk søgeord før metodenavn omtales som Ikke-statisk metoder. Det er ikke nødvendigt at oprette en forekomst af klassen for at få adgang til den statiske metode og den statiske variabel. De ikke-statiske metoder bruges dynamisk eller runtime binding. I modsætning til statisk metode, kan vi tilsidesætte ikke-statisk metode.

Lad os oprette et Java-program og generere den samme fejl.

konverter byte array til streng

I det følgende eksempel har vi erklæret en privat variabel nummer af typen int før main() metoden. I main()-metoden forsøger vi at øge tallet med 1. Det skal bemærkes, at main()-metoden er en statisk metode, og variablen er ikke statisk. Når vi kompilerer ovenstående program, får vi den samme fejl, 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); } } 

Produktion:

gør mens java
Hvorfor ikke-statisk variabel ikke kan refereres fra en statisk kontekst i Java

Lad os nu erklære variablen nummer som statisk og kompiler koden. Bemærk, 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); } } 

Produktion:

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

Programmet kompilerer og kører med succes.

Hver forekomst af en ikke-statisk variabel har en anden værdi og oprettes, når operatoren new() initialiserer en forekomst af et objekt. De statiske variable oprettes eller initialiseres, når klassen indlæses i JVM .

Vi har brug for en instans af et objekt for at kalde den ikke-statiske variabel. Vi kan skabe mange objekter ved at give forskellige værdier til den ikke-statiske eller instansvariabel.

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

Produktion:

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

I ovenstående program, tre objekter, var1, var2, var3 , er oprettet til klassen variabel og tildelt de tre forskellige værdier 12, 13, 14 for objekterne var1, var2 , og var3 , henholdsvis. Nu, den nummer egenskaben for hvert objekt har sin egen heltalsværdi. Når vi forsøger at øge værdien af ​​egenskaben number ved at kalde increment() metoden, forstår compileren ikke for hvilken værdi af tal metoden skal øge værdien for. Compileren står over for flertydighedsfejlen og kaster kompileringstidsfejlen ikke-statisk variabel kan ikke refereres fra en statisk kontekst .

Løsning på fejlen

Der er en enkel måde at løse problemet på ikke-statisk variabel kan ikke refereres fra en statisk kontekst fejl. I ovenstående kode skal vi adressere den ikke-statiske variabel med objektnavnet. På en enkel måde skal vi oprette et objekt af klassen for at referere til en ikke-statisk variabel fra en statisk kontekst. En ny kopi af alle de ikke-statiske variable oprettes, når en ny forekomst af variabel oprettes. Så vi kan få adgang til disse variabler ved at bruge referencen til den nye forekomst af klassen. overveje 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 } } 

Produktion:

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

Beskrivelse

I ovenstående program får vi adgang til egenskaben nummer ved at bruge klassenavnet statiskEksempel. Vi opretter et objekt med StaticExample-klassenavnet prøve og forøg nummerets værdi ved at bruge testobjektet.