Chyba: non-statický metoda... cannot be referenced from a static context

Při programování v jazyce Java se může objevit chybová zpráva "non-static method... cannot be referenced from a static context" (nestatická metoda nemůže být odkazována ze statického kontextu).
Tato chybová zpráva nastává, když se snažíme volat nestatickou metodu (členskou metodu) z nitra statické metody nebo statického bloku kódu.

Pro lepší pochopení této chyby je třeba mít jasno v pojmu statických a nestatických metod. Statické metody patří třídě jako celku a nejsou vázány na konkrétní instanci třídy.
Na druhé straně, nestatické metody jsou vázány na konkrétní instanci třídy a mohou přistupovat ke všem proměnným třídy včetně těch, které jsou nestatické.

Snažíme-li se zevnitř statické metody volat nestatickou metodu, javac (kompilátor jazyka Java) vyhodí chybovou zprávu "non-static method... cannot be referenced from a static context".
Důvodem je, že statická metoda není vázána na žádnou konkrétní instanci třídy a proto nemůže volat metodu, která je vázána na nějakou instanci.

K vyřešení této chyby existuje několik přístupů.
Chceme-li volat nestatickou metodu zevnitř statické, můžeme vytvořit instanci třídy, na které budeme volat tuto metodu. Alternativně můžeme tuto metodu přeměnit na statickou, je-li to vhodné.
Tímto způsobem se metoda stane dostupnou zevnitř jiných statických metod.

A nyní podíváme příklad kódu v jazyce Java, který ilustruje chybu "non-static method... cannot be referenced from a static context":

Příklad kódu 1
Příklad kódu 2

V tomto příkladu třída StaticExample obsahuje statické i nestatické prvky. Ve funkci main, která je statická, se pokus o volání nonStaticMethod() přímo způsobí chybu "non-static method... cannot be referenced from a static context ".
Chyba vzniká proto, že statická metoda (main) nemá přímý přístup k nestatickým metodám a proměnným.

Abychom tuto chybu opravili, vytvoříme instanci třídy StaticExample a voláme nonStaticMethod() přes tuto instanci.

Celkově je důležité mít na paměti, že statické metody nemají přístup k nestatickým proměnným nebo metodám přímo.
Proto je třeba dávat pozor na to, jaké metody voláme az jakého kontextu. Řešení této chyby spočívá v pochopení rozdílu mezi statickými a nestatickými členy třídy a ve správném používání těchto členů v závislosti na kontextu, ve kterém se nacházíme.

V tomto článku jsme se podívali na chybovou zprávu "non-static method... cannot be referenced from a static context" v jazyce Java.
Tato chyba nastává při pokusu o volání nestatické metody zevnitř statické metody nebo bloku kódu. Řešení této chyby spočívá v pochopení konceptu statických a nestatických členů třídy a vhodném používání těchto členů v závislosti na kontextu.

Jak začít programovat?

Úvod do programování pro každého bez předchozích znalostí.

Stáhněte si náš ebook teď výjimečně zdarma!!!

Cicso Lab v Bratislave

Mohlo by vás zaujímať:

Java TeamLeader Připraven pomoci.

Java TeamLeader

Online kurz programování v Javě

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

Programování není obtížné! Kódování vlastních appek v nástroji Java je veliká zábava. Do konce léta programujete vy sami nebo vaše bystré děti své první appky

Jak začít programovat?

Ako začať programovať?

Úvod do programování pro každého bez předchozích znalostí. SStáhněte si náš ebook teď výjimečně zdarma!!!

Ovládněte GIT a GitHub z příkazové řádky jako hacker

Školení-java-pro-začátečníky

Vyhraďte si den-dva a naučte se pracovat s GITem tak, že vám vaši kolegové budou dívat přes rameno, jak to do pekla děláte... od úplných základů přes praktické příklady.

7denní výzva programování Webu

7dňová výzva programovania Webu

Budete umět vytvářet pěkné weby koncem příštího týdne? Ano, dá se to! Rádi vám s tím pomůžeme. Stačí přijmout Sedmidenní výzvu a rezervovat si tento kurz