Průvodci

Oprava: Na statickou metodu nelze odkazovat ze statického kontextu

Mnoho programátorů čelí chybové zprávě „Na statickou metodu nelze odkazovat ze statického kontextu„Když kódují. Tato chybová zpráva není konkrétní a může se vyskytnout v jakémkoli prostředí IDE, pokud jsou splněny podmínky chyby.

Toto je velmi častá chyba pro začátečníky, kde se programátor snaží použít třídu „staticky“, aniž by provedl instanci třídy. Existuje několik podmínek, které musí být splněny, když používáte třídu, která je statická. V tomto článku projdeme několik různých případů a provedeme vás, jak používat statickou třídu.

Co je to statická metoda?

Přidání klíčového slova „statický“ do jakékoli metody způsobí, že bude metoda známá jako statická metoda. Statická metoda patří spíše do třídy než do objektu (což je norma). Statickou metodu lze snadno vyvolat bez podmínky vytvoření instance třídy.

Existuje několik různých použití statických metod, například pomocí nich můžete změnit statický datový člen a jeho hodnotu. Při použití statické metody však stále existují určitá omezení. Například pokud chcete získat přístup k nestatickým polím vaší třídy, musíte použít nestatickou metodu. Stručně řečeno, statické metody se používají velmi rezervně, ale mají své výhody.

Zde je krátký příklad toho, jak lze provést statickou metodu ke změně vlastnosti všech objektů.

třída Studenti {int roll_no; Název řetězce; static String college = "InformationTech"; static void change () {college = “Management";} Students (int number, String name_self) {roll_no = number; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + college);} public static void main (String args []) {Students.change (); Students stu_1 = new Students (100, "Mexican"); Students stu_2 = new Students (202, "American"); Students stu_3 = noví studenti (309, „Britové“); stu_1.display (); stu_2.display (); stu_3.display ();}}

Výstupem programu bude:

100 Mexické vedení 202 Americké vedení 309 Britské vedení

Jaký je rozdíl mezi třídou a instancí třídy?

Myslíte si, že jdete po ulici a vidíte auto. Nyní okamžitě víte, že se jedná o auto, i když nevíte, jaký je jeho model nebo typ. Je to proto, že víte, že to patří do třídy „automobilů“, o kterých už víte. Představte si tu třídu jako šablonu nebo nápad.

Když se přiblížíte, uvidíte model a značku automobilu. Zde rozpoznáváte „instanci“ třídy „auto“. Zde budou podrobně uvedeny všechny vlastnosti; kola, výkon, ráfky atd.

Příkladem vlastností může být, že třída „auto“ uvádí, že všechna auta by měla mít kola. Auto, které vidíte (příklad třídy automobilu), má ráfky ze slitiny.

V objektově orientovaném programování definujete třídu sami a uvnitř třídy definujete pole typu „barva“. Kdykoli je třída vytvořena, paměť je automaticky vyhrazena pro barvu na backendu a později, můžete jí dát konkrétní hodnotu (například červenou). Protože atributy jako tyto jsou specifické, jsou nestatické.

Naproti tomu statické metody a pole jsou sdílena se všemi instancemi. Jsou určeny pro hodnotu nebo položky, které jsou specifické pro třídu a ne pro samotnou instanci. Pro metody mohou existovat globální metody (například převodník stringtoInt) a pro pole jsou to obvykle konstanty podle vašeho kódu (například typ automobilu může být statický, pokud vyrábíte pouze normální automobily).

Nyní se podíváme na všechny různé případy, kdy se vaše kódování může pokazit, a uvidíme řešení, jak je opravit.

Problém 1: Voláte něco, co neexistuje

Narazili jsme na některé případy, kdy uživatelé navzájem používali statické i nestatické metody. Když to uděláme, měli byste být opatrní, jaká metoda volá co (staticky nebo ne). Podívejte se na následující kód:

private java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// Následující příkaz způsobí chybu. Víte proč .. java.util.List someList = someMethod (); }

Zde statická metoda volá someMethod. V objektově orientovaném programování zapouzdřujeme data spolu s daty, na kterých chceme pracovat. Tady bez objektu neexistují žádná data instance a zatímco metody instance existují jako součást definice třídy, vždy by měla existovat instance objektu, která jim poskytuje data.

Stručně řečeno, nemůžete volat něco, co neexistuje. Protože jste možná nevytvořili objekt, nestatická metoda ještě neexistuje. Na druhou stranu však statická metoda bude vždy existovat (z důvodu definice).

Problém 2: Metody nejsou statické

Pokud vyvoláváte metody ze své statické hlavní metody bez vytvoření instance metod, zobrazí se chybová zpráva. Zde platí stejný princip; nemůžete získat přístup k něčemu, co neexistuje.

veřejná třída BookStoreApp2 {// konstanty pro možnosti Vstup skeneru = nový Skener (System.in); public static void main (String [] args) {BookStoreItem [] item; // deklarování pole item = new BookStoreItem [10]; // inicializace pole int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // konec příkazu switch} // konec cyklu for pro (int i = 0; i <item.length; i ++) {} // konec of for} // konec hlavní metody

Zde v tomto kódu musíte převést obě metody printMenu () a getUserChoice () do statických metod.

Pokud tedy chcete situaci v této situaci obejít, můžete použít a konstruktor namísto. Můžete například vzít obsah vaší metody main () a umístit je do konstruktoru.

public BookStoreApp2 () {// Sem vložte obsah hlavní metody} Poté proveďte uvnitř vaší metody main () následující: public void main (String [] args) {new BookStoreApp2 (); }

Pokud tyto tipy nefungují na vašem kódu, nebo se váš kód liší, měli byste mít na paměti základní principy statických tříd a metod a znovu zkontrolovat svůj kód, abyste se ujistili, že není porušen základní princip.

$config[zx-auto] not found$config[zx-overlay] not found