Chyba: non-static method... cannot be referenced from a static context

Pri programovaní v jazyku Java sa môže objaviť chybová správa "non-static method... cannot be referenced from a static context" (nestatická metóda nemôže byť odkazovaná zo statického kontextu).
Táto chybová správa nastáva, keď sa snažíme volať nestatickú metódu (členskú metódu) z vnútra statickej metódy alebo statického bloku kódu.

Na lepšie pochopenie tejto chyby je potrebné mať jasno v pojme statických a nestatických metód. Statické metódy patria triede ako celku a nie sú viazané na konkrétnu inštanciu triedy.
Na druhej strane, nestatické metódy sú viazané na konkrétnu inštanciu triedy a môžu pristupovať ku všetkým premenným triedy vrátane tých, ktoré sú nestatické.

Ak sa snažíme z vnútra statickej metódy volať nestatickú metódu, javac (kompilátor jazyka Java) vyhodí chybovú správu "non-static method... cannot be referenced from a static context".
Dôvodom je, že statická metóda nie je viazaná na žiadnu konkrétnu inštanciu triedy a preto nemôže volať metódu, ktorá je viazaná na nejakú inštanciu.

Na vyriešenie tejto chyby existuje niekoľko prístupov.
Ak chceme volať nestatickú metódu zvnútra statickej, môžeme vytvoriť inštanciu triedy, na ktorej budeme volať túto metódu. Alternatívne, môžeme túto metódu premeniť na statickú, ak to je vhodné.
Týmto spôsobom sa metóda stane dostupnou zvnútra iných statických metód.

A teraz pozrieme príklad kódu v jazyku Java, ktorý ilustruje chybu "non-static method... cannot be referenced from a static context":

non-static method priklad
non-static method

V tomto príklade trieda StaticExample obsahuje statické aj nestatické prvky. Vo funkcii main, ktorá je statická, sa pokus o volanie nonStaticMethod() priamo spôsobí chybu "non-static method... cannot be referenced from a static context".
Chyba vzniká preto, že statická metóda (main) nemá priamy prístup k nestatickým metódam a premenným.

Aby sme túto chybu opravili, vytvoríme inštanciu triedy StaticExample a voláme nonStaticMethod() cez túto inštanciu.

Celkovo je dôležité mať na pamäti, že statické metódy nemajú prístup k nestatickým premenným alebo metódam priamo.
Preto je potrebné dávať pozor na to, aké metódy voláme a z akého kontextu. Riešenie tejto chyby spočíva v pochopení rozdielu medzi statickými a nestatickými členmi triedy a v správnom používaní týchto členov v závislosti od kontextu, v ktorom sa nachádzame.

V tomto článku sme sa pozreli na chybovú správu "non-static method... cannot be referenced from a static context" v jazyku Java.
Táto chyba nastáva pri pokuse o volanie nestatickej metódy z vnútra statickej metódy alebo bloku kódu. Riešenie tejto chyby spočíva v pochopení konceptu statických a nestatických členov triedy a vhodnom používaní týchto členov v závislosti od kontextu.

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí.

Stiahnite so náš ebook teraz výnimočne zdarma!!!

Cicso Lab v Bratislave

Mohlo by vás zaujímať:

Java TeamLeader Pripravený pomôcť.

Java TeamLeader

Online kurz programovania v Jave

Školenie-java-pre-začíatočnikov

Programovanie nie je ťažké! Kódenie vlastných appiek v nástroji Java je veľká zábava. Do konca leta programujete vy sami alebo vaše bystré deti svoje prvé appky

Ako začať programovať?

Ako začať programovať?

Úvod do programovania pre každého bez prechádzajúcich znalostí. Stiahnite so náš ebook teraz výnimočne zdarma!!!

Ovládnite GIT a GitHub z príkazového riadku ako hacker

Školenie-java-pre-začíatočnikov

Vyhraďte si deň-dva a naučte sa pracovať s GITom tak, že vám vaši kolegovia budú pozerať cez rameno, ako to do pekla robíte... od úplných základov cez praktické príklady.

7dňová výzva programovania Webu

7dňová výzva programovania Webu

Budete vedieť vytvárať pekné weby koncom budúceho týždňa? Áno, dá sa to! Radi vám s tým pomôžeme. Stačí prijať Sedemdňovú výzvu a rezervovať si tento kurz