Javítás: Nem statikus módszerre nem lehet hivatkozni statikus kontextusból

Sok programozó a „ Nem statikus módszerre nem lehet hivatkozni statikus kontextusból ” hibaüzenettel jelentkezik, amikor kódol. Ez a hibaüzenet nem specifikus, és bármely IDE-ben előfordulhat, ha a hiba feltételei teljesülnek.

Ez nagyon gyakori hiba a kezdőknél, ahol a programozó megpróbálja 'statikusan' használni az osztályt anélkül, hogy az osztályból példányt hozna létre. Számos feltételnek kell teljesülnie, ha statikus osztályt használ. Ebben a cikkben több különböző esetet fogunk áttanulmányozni, és megismertetjük a statikus osztály használatával.

Mi az a statikus módszer?

A „statikus” kulcsszó bármilyen módszerhez való hozzáadása statikus módszerként ismeri a módszert. A statikus módszer inkább az osztályhoz tartozik, mintsem egy objektumhoz (ami a norma). A statikus módszer könnyen meghívható egy osztály példányának létrehozásának feltétele nélkül.

A Statikus módszereknek többféle célja van, például megváltoztathatja a statikus adattagot és annak értékét. A Statikus módszer használatakor azonban még mindig vannak korlátozások. Például, ha osztályának nem statikus mezőihez szeretne hozzáférni, akkor nem statikus módszert kell használnia. Összefoglalva tehát, a statikus módszereket nagyon ritkán használják, de vannak előnyeik.

Íme egy rövid példa arra, hogyan lehet statikus módszerrel módosítani az összes objektum tulajdonságait.

osztályos tanulók {int roll_no; Karakterlánc neve; statikus karakterlánc főiskola = "InformationTech"; static void change () {college = “Management”;} Diákok (int szám, String név_mag) {roll_no = szám; név = név_mag;} void display () {System.out.println (rollno + "" + név + "" + főiskola);} public static void main (String args []) {Students.change (); Student stu_1 = new Students (100, "Mexican"); Student stu_2 = new Students (202, "American"); Student stu_3 = új hallgatók (309, "brit"); stu_1.display (); stu_2.display (); stu_3.display ();}}

A program kimenete a következő lesz:

100 mexikói menedzsment 202 amerikai menedzsment 309 brit menedzsment

Mi a különbség egy osztály és egy osztály példánya között?

Gondolja, hogy az utcán jár, és lát egy autót. Most azonnal tudja, hogy ez egy autó, még akkor is, ha nem tudja, mi a típusa vagy típusa. Ez azért van, mert tudod, hogy ez az „autók” osztályába tartozik, amelyekről már tudsz. Gondoljon az osztályra itt mint sablonra vagy ötletre.

Közelebb lépve meglátja az autó modelljét és gyártmányát. Itt ismeri fel az „autó” osztály „példányát”. Itt minden tulajdonság részletesen jelen lesz; a kerekek, a lóerő, a felnik stb.

A tulajdonságokra példa lehet, hogy az „autó” osztály kimondja, hogy minden autónak rendelkeznie kell kerekekkel. A látott autó (például az autóosztály) ötvözött felnikkel rendelkezik.

Az objektumorientált programozás során maga határozza meg az osztályt, az osztályon belül pedig a „color” típusú mezőt. Amikor az osztály példányos lesz, a memória automatikusan lefoglalásra kerül a háttérbeli színre, és később ennek adott értéket adhat meg (például piros). Mivel az ilyen attribútumok specifikusak, nem statikusak.

Ezzel szemben a statikus módszerek és mezők meg vannak osztva az összes példánnyal. Ezek olyan értékre vagy tételekre vonatkoznak, amelyek specifikusan az osztályra vonatkoznak, és nem magára a példányra. A módszerek esetében létezhetnek globális módszerek (például a stringtoInt konverter), a mezők esetében pedig általában konstansok a kódod szerint (például az autó típusa statikus lehet, ha csak normál autókat gyártasz).

Most megvizsgáljuk az összes olyan esetet, amikor a kódolás elromolhat, és meglátjuk a megoldást.

1. kérdés: Olyat hív, ami nem létezik

Találkoztunk olyan esetekkel, amikor a felhasználók statikus és nem statikus módszereket egyaránt alkalmaztak egymással. Amikor ezt megtesszük, ügyeljen arra, hogy melyik módszer mit hív (statikus vagy nem). Vessen egy pillantást a következő kódra:

privát java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// A következő utasítás okozza a hibát. Tudod miért .. java.util.List someList = someMethod (); }

Itt a statikus módszer a someMethod nevet hívja. Az objektum-orientált programozás során az adatokat összefoglaljuk azokkal az adatokkal, amelyeket működtetni szeretnénk. Itt, objektum nélkül, nincsenek példányadatok, és bár a példány metódusok az osztálydefiníció részeként léteznek, mindig léteznie kell egy objektumpéldánynak, amely adatokat szolgáltat nekik.

Tehát összefoglalva: nem hívhat olyat, ami nem létezik. Mivel lehet, hogy nem hozott létre objektumot, a nem statikus módszer még nem létezik. Másrészről azonban statikus módszer mindig létezik (a meghatározás miatt).

2. kérdés: A módszerek nem lesznek statikusak

Ha a Static main metódusból hívja meg a metódusokat anélkül, hogy létrehozna egy metódust, akkor hibaüzenetet kap. Itt ugyanaz az elv érvényesül; nem férhet hozzá valamihez, ami nem létezik.

public class BookStoreApp2 {// konstansok az opciókhoz Szkenner bemenet = új Szkenner (System.in); public static void main (String [] args) {BookStoreItem [] item; // tömb elem deklarálása = new BookStoreItem [10]; // tömb inicializálása int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // kapcsoló vége vége} // for ciklus vége for (int i = 0; i <item.length; i ++) {} // end of for} // fő módszer vége

Ebben a kódban a printMenu () és a getUserChoice () metódusokat egyaránt statikus módszerekké kell konvertálni .

Ezért ha ilyen helyzetet akar megkerülni, ehelyett használhat egy konstruktort . Például felveheti a main () metódusának tartalmát, és elhelyezheti egy konstruktorban.

public BookStoreApp2 () {// Helyezze ide a fő módszer tartalmát} Ezt követően tegye a következőket a main () metódusán belül: public void main (String [] args) {new BookStoreApp2 (); }

Ha ezek a tippek nem működnek az Ön nevében, vagy a kódja eltér, tartsa szem előtt a Statikus osztályok és módszerek alapelveit, és ellenőrizze újra a kódot, hogy megbizonyosodjon arról, hogy nem sérül-e az alapelv.