logo

Prečo nie je možné odkazovať na nestatickú premennú zo statického kontextu v jazyku Java

Chyba na nestatickú premennú nie je možné odkazovať zo statického kontextu v jazyku Java čelia väčšinou začiatočníci v čase kompilácie programu Java. Dôvodom výskytu tejto chyby je, že používajú nestatickú členskú premennú v metóde main(). Pretože metóda main() v jazyku Java je statická metóda a vyvoláva sa automaticky, na jej vyvolanie nemusíme vytvárať objekt. Aby sme pochopili chybu, najprv by sme mali pochopiť statické a nestatický metóda v Jave .

Statická metóda

In Java , verejné metódy patria do inštancie triedy, ale ak hovoríme o statická metóda , patria do triedy, nie do inštancie triedy. Na vyvolanie statickej metódy nie je potrebné vytvárať inštanciu triedy. Statický člen má prístup len k statickému dátovému členu a môže meniť jeho hodnotu.

Nestatická metóda

Všetky metódy bez nutnosti statické kľúčové slovo pred názvom metódy sa označuje ako Nestatický metódy. Nie je potrebné vytvárať inštanciu triedy pre prístup k statickej metóde a statickej premennej. Pri nestatických metódach sa používa dynamická alebo runtime väzba. Na rozdiel od statické metódu, môžeme prepísať nestatický metóda.

Vytvorme program Java a vygenerujeme rovnakú chybu.

latexové veľkosti písma

V nasledujúcom príklade sme deklarovali súkromnú premennú číslo typu int pred metódou main(). V metóde main() sa snažíme zvýšiť číslo o 1. Treba poznamenať, že metóda main() je statická metóda a premenná nie je statická. Keď skompilujeme vyššie uvedený program, dostaneme rovnakú chybu, ako sme si ukázali nižšie.

StaticExample1.java

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

Výkon:

verejná vs súkromná java
Prečo nie je možné odkazovať na nestatickú premennú zo statického kontextu v jazyku Java

Teraz deklarujme premennú číslo ako statické a skompilovať kód. Všimnite si, že premenná aj metóda main() sú statické.

StaticExample2.java

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

Výkon:

Prečo nie je možné odkazovať na nestatickú premennú zo statického kontextu v jazyku Java

Program sa úspešne skompiluje a spustí.

Každá inštancia nestatickej premennej má inú hodnotu a vytvorí sa, keď operátor new() inicializuje inštanciu objektu. Statické premenné sa vytvoria alebo inicializujú pri načítaní triedy JVM .

Na volanie nestatickej premennej potrebujeme inštanciu objektu. Môžeme vytvoriť veľa objektov pridelením rôznych hodnôt tejto nestatickej alebo inštancii premennej.

linux premenovať adresár

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ýkon:

Prečo nie je možné odkazovať na nestatickú premennú zo statického kontextu v jazyku Java

Vo vyššie uvedenom programe sú tri objekty, var1, var2, var3 , sú vytvorené pre triedu premenlivý a priradil tri rôzne hodnoty 12, 13, 14 pre objekty var1, var2 , a var3 , resp. Teraz, číslo vlastnosť každého objektu má svoju vlastnú celočíselnú hodnotu. Keď sa pokúšame zvýšiť hodnotu vlastnosti číslo volaním metódy increment(), kompilátor nerozumie, o akú hodnotu čísla má metóda hodnotu zvýšiť. Kompilátor čelí chybe nejednoznačnosti a vyvoláva chybu v čase kompilácie na nestatickú premennú nemožno odkazovať zo statického kontextu .

Riešenie chyby

Existuje jeden jednoduchý spôsob riešenia na nestatickú premennú nemožno odkazovať zo statického kontextu chyba. Vo vyššie uvedenom kóde musíme nestatickú premennú osloviť názvom objektu. Jednoduchým spôsobom musíme vytvoriť objekt triedy, ktorý bude odkazovať na nestatickú premennú zo statického kontextu. Pri vytvorení novej inštancie premennej sa vytvorí nová kópia všetkých nestatických premenných. Takže k týmto premenným môžeme pristupovať pomocou odkazu na novú inštanciu triedy. zvážte napríklad nasledujúci program Java.

hviezdicová topológia

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ýkon:

Prečo nie je možné odkazovať na nestatickú premennú zo statického kontextu v jazyku Java

Popis

Vo vyššie uvedenom programe pristupujeme k vlastnosti čísla pomocou názvu triedy statickýPríklad. Vytvoríme objekt s názvom triedy StaticExample test a zvýšiť hodnotu čísla pomocou testovacieho objektu.