logo

Miért nem lehet hivatkozni a nem statikus változóra statikus kontextusból Java-ban?

A hiba A nem statikus változóra nem lehet hivatkozni a Java statikus kontextusából leginkább a kezdők szembesülnek a Java program fordítása idején. Ennek a hibának az az oka, hogy nem statikus tagváltozót használnak a main() metódusban. Mivel a Java main() metódusa statikus metódus, és automatikusan meghívásra kerül, nem kell objektumot létrehoznunk a meghíváshoz. A hiba megértéséhez először meg kell értenünk a statikus és nem statikus módszer Java-ban .

Statikus módszer

Ban ben Jáva , a nyilvános metódusok az osztály egy példányához tartoznak de ha beszélünk statikus módszer , egy osztályhoz tartoznak, nem pedig egy osztály példányához. A statikus metódus meghívásához nincs szükség az osztály példányának létrehozására. A statikus tag csak a statikus adattaghoz férhet hozzá, és megváltoztathatja annak értékét.

Nem statikus módszer

Minden módszer anélkül statikus A módszer neve előtti kulcsszóra úgy hivatkozunk, mint Nem statikus mód. A statikus metódus és statikus változó eléréséhez nincs szükség az osztály példányának létrehozására. A nem statikus módszerek dinamikus vagy futásidejű kötést használnak. nem úgy mint statikus módszerrel felülírhatjuk a nem statikus módszer.

Hozzunk létre egy Java programot, és generáljuk ugyanazt a hibát.

javascript globális változók

A következő példában egy privát változót deklaráltunk szám int típusú a main() metódus előtt. A main() metódusban a számot 1-gyel próbáljuk növelni. Megjegyzendő, hogy a main() metódus egy statikus metódus, és a változó nem statikus. Amikor a fenti programot fordítjuk, ugyanazt a hibát kapjuk, mint ahogy az alábbiakban bemutattuk.

StatikusPélda1.java

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

Kimenet:

java térképek
Miért nem lehet hivatkozni a nem statikus változóra statikus kontextusból Java-ban?

Most deklaráljuk a változót szám statikusként, és fordítsa le a kódot. Vegye figyelembe, hogy a változó és a main() metódus egyaránt statikus.

StatikusPélda2.java

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

Kimenet:

Miért nem lehet hivatkozni a nem statikus változóra statikus kontextusból Java-ban?

A program lefordítja és sikeresen fut.

A nem statikus változó minden példányának más értéke van, és akkor jön létre, amikor a new() operátor inicializálja egy objektum példányát. A statikus változók az osztály betöltésekor jönnek létre vagy inicializálódnak JVM .

Szükségünk van egy objektum példányára a nem statikus változó meghívásához. Sok objektumot létrehozhatunk, ha különböző értékeket adunk az adott nem statikus vagy példányváltozónak.

párhuzamos feldolgozás

StatikusPélda3.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); } } 

Kimenet:

Miért nem lehet hivatkozni a nem statikus változóra statikus kontextusból Java-ban?

A fenti programban három objektum, var1, var2, var3 , jönnek létre az osztály számára változó és hozzárendelte a három különböző értéket 12, 13, 14 az objektumokhoz var1, var2 , és var3 , ill. Most a szám Minden objektum tulajdonságnak megvan a maga egész értéke. Amikor megpróbáljuk növelni a szám tulajdonság értékét az increment() metódus meghívásával, a fordító nem érti, hogy a metódus milyen számértéknél növelje az értéket. A fordító szembesül a kétértelműségi hibával, és kidobja a fordítási időt a nem statikus változóra nem lehet statikus kontextusból hivatkozni .

A hiba megoldása

Egy egyszerű módja van a megoldásnak a nem statikus változóra nem lehet statikus kontextusból hivatkozni hiba. A fenti kódban a nem statikus változót az objektumnévvel kell megcímeznünk. Egyszerű módon létre kell hoznunk egy objektumot az osztályból, hogy egy statikus kontextusból egy nem statikus változóra hivatkozzunk. A változó új példányának létrehozásakor az összes nem statikus változó új másolata jön létre. Tehát ezeket a változókat az osztály új példányának hivatkozásával érhetjük el. vegyük például a következő Java programot.

pyspark oktatóanyag

StatikusPélda4.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 } } 

Kimenet:

Miért nem lehet hivatkozni a nem statikus változóra statikus kontextusból Java-ban?

Leírás

A fenti programban az osztálynév használatával érjük el a szám tulajdonságot statikusPélda. Létrehozunk egy objektumot a StaticExample osztálynévvel teszt és növelje a szám értéke a tesztobjektum használatával.