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":
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.