Chyba nestatickou proměnnou nelze odkazovat ze statického kontextu v Javě se většinou potýkají začátečníci v době kompilace programu Java. Důvodem výskytu této chyby je to, že používají nestatickou členskou proměnnou v metodě main(). Protože metoda main() v Javě je statická metoda a je volána automaticky, nemusíme k jejímu vyvolání vytvářet objekt. Abychom pochopili chybu, měli bychom nejprve porozumět statický a nestatické metoda v Javě .
Statická metoda
v Jáva , veřejné metody patří do instance třídy, ale pokud mluvíme o statická metoda , patří do třídy, nikoli do instance třídy. Pro vyvolání statické metody není potřeba vytvářet instanci třídy. Statický člen má přístup pouze ke statickému datovému členu a může měnit jeho hodnotu.
Nestatická metoda
Všechny metody bez nutnosti statický klíčové slovo před názvem metody jsou označovány jako Nestatické metody. Není potřeba vytvářet instanci třídy pro přístup ke statické metodě a statické proměnné. K nestatickým metodám se používá dynamická nebo runtime vazba. Na rozdíl od statický metodu, můžeme přepsat nestatické metoda.
Vytvořme Java program a vygenerujeme stejnou chybu.
velikosti latexového písma
V následujícím příkladu jsme deklarovali soukromou proměnnou číslo typu int před metodou main(). V metodě main() se snažíme zvýšit číslo o 1. Je třeba poznamenat, že metoda main() je statická metoda a proměnná není statická. Když zkompilujeme výše uvedený program, dostaneme stejnou chybu, jak jsme si ukázali níže.
StaticExample1.java
public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Výstup:
arraylist v jazyce Java
Nyní deklarujme proměnnou číslo jako statické a zkompilujte kód. Všimněte si, že proměnná i metoda main() jsou statické.
StaticExample2.java
class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } }
Výstup:
Program se úspěšně zkompiluje a spustí.
abstraktní třída java
Každá instance nestatické proměnné má jinou hodnotu a je vytvořena, když operátor new() inicializuje instanci objektu. Statické proměnné se vytvoří nebo inicializují při načtení třídy JVM .
Potřebujeme instanci objektu pro volání nestatické proměnné. Můžeme vytvořit mnoho objektů tím, že této nestatické nebo instanční proměnné přiřadíme různé hodnoty.
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); } }
Výstup:
Ve výše uvedeném programu jsou tři objekty, var1, var2, var3 , jsou vytvořeny pro třídu variabilní a přiřadila tři různé hodnoty 12, 13, 14 objektům var1, var2 , a var3 , resp. Nyní, číslo vlastnost každého objektu má svou vlastní celočíselnou hodnotu. Když se pokusíme zvýšit hodnotu vlastnosti number voláním metody increment(), kompilátor nerozumí, o jakou hodnotu čísla má metoda hodnotu zvýšit. Kompilátor čelí chybě nejednoznačnosti a vyvolá chybu při kompilaci nestatickou proměnnou nelze odkazovat ze statického kontextu .
Řešení chyby
Existuje jeden jednoduchý způsob řešení na nestatickou proměnnou nelze odkazovat ze statického kontextu chyba. Ve výše uvedeném kódu musíme nestatickou proměnnou oslovit názvem objektu. Jednoduchým způsobem musíme vytvořit objekt třídy, který bude odkazovat na nestatickou proměnnou ze statického kontextu. Při vytvoření nové instance proměnné se vytvoří nová kopie všech nestatických proměnných. K těmto proměnným tedy můžeme přistupovat pomocí odkazu na novou instanci třídy. zvažte například následující program Java.
10 ml je kolik
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 } }
Výstup:
Popis
Ve výše uvedeném programu přistupujeme k vlastnosti number pomocí názvu třídy statickýPříklad. Vytvoříme objekt s názvem třídy StaticExample test a zvýšit hodnotu čísla pomocí testovacího objektu.