De fout Er kan niet naar een niet-statische variabele worden verwezen vanuit een statische context in Java wordt vooral geconfronteerd met beginners op het moment dat het Java-programma wordt samengesteld. De reden dat deze fout optreedt, is dat ze een niet-statische lidvariabele gebruiken in de methode main(). Omdat de methode main() in Java een statische methode is en automatisch wordt aangeroepen, hoeven we geen object te maken om deze aan te roepen. Om de fout te begrijpen, moeten we eerst de fout begrijpen statisch En niet-statisch methode op Java .
Statische methode
In Java , publieke methoden behoren tot een instantie van klasse, maar als we het erover hebben statische methode , ze behoren tot een klasse en niet tot een exemplaar van een klasse. Het is niet nodig om een instantie van de klasse te maken om een statische methode aan te roepen. Het statische lid heeft alleen toegang tot het statische gegevenslid en kan de waarde ervan wijzigen.
Niet-statische methode
Alle methoden zonder te hebben statisch trefwoord vóór de naam van de methode worden aangeduid als Niet-statisch methoden. Het is niet nodig om een instantie van de klasse te maken voor toegang tot de statische methode en de statische variabele. De niet-statische methoden worden gebruikt voor dynamische of runtime-binding. in tegenstelling tot statisch methode kunnen we de niet-statisch methode.
Laten we een Java-programma maken en dezelfde fout genereren.
verbinding maken met de database in Java
In het volgende voorbeeld hebben we een privévariabele gedeclareerd nummer van het type int vóór de methode main(). In de methode main() proberen we het getal met 1 te verhogen. Opgemerkt moet worden dat de methode main() een statische methode is en dat de variabele niet statisch is. Wanneer we het bovenstaande programma compileren, krijgen we dezelfde foutmelding, zoals we hieronder hebben laten zien.
StatischVoorbeeld1.java
public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Uitgang:
doe terwijl java
Laten we nu de variabele declareren nummer als statisch en compileer de code. Merk op dat variabele en de methode main() beide statisch zijn.
StatischVoorbeeld2.java
class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Uitgang:
Het programma wordt gecompileerd en met succes uitgevoerd.
Elke instantie van een niet-statische variabele heeft een andere waarde en wordt gemaakt wanneer de operator new() een instantie van een object initialiseert. De statische variabelen worden gemaakt of geïnitialiseerd wanneer de klasse wordt geladen JVM .
We hebben een instantie van een object nodig om de niet-statische variabele aan te roepen. We kunnen veel objecten maken door verschillende waarden aan die niet-statische variabele of instantievariabele te geven.
Java-tekenreeks aaneengeschakeld
StatischVoorbeeld3.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); } }
Uitgang:
In het bovenstaande programma zijn drie objecten, var1, var2, var3 , zijn gemaakt voor de klas variabel en de drie verschillende waarden 12, 13, 14 voor de objecten toegewezen var1, var2 , En var3 respectievelijk. Nu de nummer eigenschap van elk object heeft zijn eigen gehele waarde. Wanneer we proberen de waarde van de eigenschap number te verhogen door de methode increment() aan te roepen, begrijpt de compiler niet voor welke waarde van getal de methode de waarde moet verhogen. De compiler wordt geconfronteerd met de dubbelzinnigheidsfout en genereert de compileerfout Er kan niet naar een niet-statische variabele worden verwezen vanuit een statische context .
Oplossing voor de fout
Er is een eenvoudige manier om het probleem op te lossen Er kan niet naar een niet-statische variabele worden verwezen vanuit een statische context fout. In de bovenstaande code moeten we de niet-statische variabele adresseren met de objectnaam. Op een eenvoudige manier moeten we een object van de klasse maken om naar een niet-statische variabele uit een statische context te verwijzen. Er wordt een nieuwe kopie van alle niet-statische variabelen gemaakt wanneer een nieuw exemplaar van de variabele wordt gemaakt. We hebben dus toegang tot deze variabelen door de referentie van het nieuwe exemplaar van de klasse te gebruiken. Beschouw bijvoorbeeld het volgende Java-programma.
Java-stringbouwer
StatischVoorbeeld4.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 } }
Uitgang:
Beschrijving
In het bovenstaande programma hebben we toegang tot de eigenschap number door de klassenaam te gebruiken statischVoorbeeld. We maken een object met de klassenaam StaticExample test en verhoog de de waarde van het getal door gebruik te maken van het testobject.