logo

Varför icke-statisk variabel inte kan refereras från ett statiskt sammanhang i Java

Felet icke-statisk variabel kan inte refereras från ett statiskt sammanhang i Java är mestadels inför nybörjare vid tidpunkten för sammanställningen av Java-programmet. Anledningen till att detta fel uppstår är att de använder en icke-statisk medlemsvariabel i main()-metoden. Eftersom main()-metoden i Java är en statisk metod och den anropas automatiskt, behöver vi inte skapa ett objekt för att anropa det. För att förstå felet bör vi först förstå statisk och icke-statisk metod i Java .

Statisk metod

I Java , offentliga metoder tillhör en instans av klass men om vi pratar om statisk metod , de tillhör en klass inte till en instans av en klass. Det finns inget behov av att skapa en instans av klassen för att anropa en statisk metod. Den statiska medlemmen kan endast komma åt den statiska datamedlemmen och kan ändra dess värde.

Icke-statisk metod

Alla metoder utan att ha statisk nyckelord före metodnamn kallas Icke-statisk metoder. Det finns inget behov av att skapa en instans av klassen för att komma åt den statiska metoden och den statiska variabeln. De icke-statiska metoderna används dynamisk eller körtidsbindning. Till skillnad från statisk metoden kan vi åsidosätta icke-statisk metod.

Låt oss skapa ett Java-program och generera samma fel.

sträng till datum

I följande exempel har vi deklarerat en privat variabel siffra av typen int före main()-metoden. I main()-metoden försöker vi öka antalet med 1. Det bör noteras att main()-metoden är en statisk metod och variabeln är inte statisk. När vi kompilerar programmet ovan får vi samma fel, som vi har visat nedan.

StaticExample1.java

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

Produktion:

arraylist i java
Varför icke-statisk variabel inte kan refereras från ett statiskt sammanhang i Java

Låt oss nu förklara variabeln siffra som statisk och kompilera koden. Observera att variabel och main()-metoden båda är statiska.

StaticExample2.java

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

Produktion:

Varför icke-statisk variabel inte kan refereras från ett statiskt sammanhang i Java

Programmet kompileras och körs framgångsrikt.

Varje instans av en icke-statisk variabel har ett annat värde och skapas när operatören new() initierar en instans av ett objekt. De statiska variablerna skapas eller initieras när klassen laddas in JVM .

Vi behöver en instans av ett objekt för att anropa den icke-statiska variabeln. Vi kan skapa många objekt genom att ge olika värden till den icke-statiska eller instansvariabeln.

metod delsträng 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:

Varför icke-statisk variabel inte kan refereras från ett statiskt sammanhang i Java

I programmet ovan, tre objekt, var1, var2, var3 , skapas för klassen variabel och tilldelade de tre olika värdena 12, 13, 14 för objekten var1, var2 , och var3 , respektive. Nu den siffra egenskapen för varje objekt har sitt eget heltalsvärde. När vi försöker öka värdet på number-egenskapen genom att anropa metoden increment() förstår inte kompilatorn för vilket värde av nummer metoden ska öka värdet. Kompilatorn står inför tvetydighetsfelet och kastar kompileringstidsfelet icke-statisk variabel kan inte refereras från ett statiskt sammanhang .

Lösning på felet

Det finns ett enkelt sätt att lösa problemet icke-statisk variabel kan inte refereras från ett statiskt sammanhang fel. I koden ovan måste vi adressera den icke-statiska variabeln med objektnamnet. På ett enkelt sätt måste vi skapa ett objekt i klassen för att referera till en icke-statisk variabel från ett statiskt sammanhang. En ny kopia av alla icke-statiska variabler skapas när en ny instans av variabel skapas. Så vi kan komma åt dessa variabler genom att använda referensen för den nya instansen av klassen. överväg till exempel följande Java-program.

hur många frukter finns det

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:

Varför icke-statisk variabel inte kan refereras från ett statiskt sammanhang i Java

Beskrivning

I programmet ovan kommer vi åt egenskapen number genom att använda klassnamnet statisktExempel. Vi skapar ett objekt med klassnamnet StaticExample testa och öka numrets värde genom att använda testobjektet.