Javítás: A nem statikus módszerre nem lehet hivatkozni statikus környezetből

Sok programozó szembesül a „ Nem statikus módszer nem hivatkozható statikus kontextusból ” hibaüzenettel kódolás közben. Ez a hibaüzenet nem specifikus, és bármilyen IDE-ben előfordulhat, ha a hiba feltételei teljesülnek.

A nem statikus módszer nem hivatkozható statikus környezetre

Ez egy nagyon gyakori hiba a kezdők számára, amikor a programozó megpróbálja egy osztályt statikusan használni, anélkül, hogy az osztály példányát tenné. Számos feltételnek kell teljesülnie, ha statikus osztályt használ. Ebben a cikkben számos különféle esetet ismertetünk, és bemutatjuk, hogyan kell használni a statikus osztályt.

Mi a statikus módszer?

A „statikus” kulcsszó hozzáadása bármely módszerhez ismerteti a módszert statikus módszernek. A statikus módszer az osztályhoz tartozik, nem pedig egy objektumhoz tartozik (ami a norma). A statikus metódust egyszerűen meg lehet hívni anélkül, hogy egy osztály példányát hozzák létre.

A statikus módszereknek számos különféle felhasználása van, például felhasználásával megváltoztathatja a statikus adattagot és annak értékét. A statikus módszer használatához azonban vannak még korlátozások. Például, ha hozzáférni szeretne az osztály nem statikus mezőihez, akkor nem statikus módszert kell használnia. Összefoglalva tehát, a statikus módszereket nagyon kevésbé használják, de vannak előnyeik.

Itt található egy rövid példa arra, hogyan lehet statikus módszert alkalmazni az összes objektum tulajdonságainak megváltoztatására.

 osztály diákok {int roll_no; Karakterlánc neve; statikus karakterlánciskola = "InformationTech"; statikus érvénytelen változás () {főiskola = “menedzsment”;} hallgatók (int szám, karakterlánc név_elfelfüggesztés) {roll_no = szám; név = név_elf;; void display () {System.out.println (rollno + "" + name + "" + egyetemi);} nyilvános statikus void main (String args []) {Students.change (); Student stu_1 = új hallgatók (100, "mexikói"); Stu stu2 = új hallgatók (202, "American"); Student stu_3 = új hallgatók (309, "brit"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

A program kimenete:

 100 mexikói menedzsment 202 amerikai menedzsment 309 brit menedzsment 

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

Gondolj, sétálsz az utcán, és látsz egy autót. Most azonnal tudja, hogy ez egy autó, még akkor sem, ha nem tudja, mi a modellje vagy típusa. Ennek oka az, hogy tudod, hogy ez az „autók” osztályába tartozik, amelyet már ismert. Gondolj az osztályra mint sablon vagy ötlet.

Most közelebb haladva láthatja az autó modelljét és gyártmányát. Itt felismeri az „autó” osztály „példányát”. Itt minden tulajdonság részletesen bemutatásra kerül; a kerekek, a lóerő, a felnik stb.

A tulajdonságokra példa lehet, hogy az „autó” osztály kimondja, hogy minden autónak kerekekkel kell rendelkeznie. A látott autónak (az autós osztály példája) könnyűfém felnik van.

Objektum-orientált programozáskor az osztályt magad határozza meg, az osztályon belül pedig a „szín” típusú mezőt határozza meg. Amikor az osztályt újraindítják, a memória automatikusan a háttér színére lesz fenntartva, majd később megadhat egy adott értéket (például piros). Mivel az ilyen tulajdonságok specifikusak, nem statikusak.

Ezzel szemben a statikus módszerek és mezők meg vannak osztva az összes példánymal. Ezeket az értéket vagy tételeket készítik, amelyek az osztályra jellemzőek, és nem magára a példányra. A módszerekhez léteznek globális módszerek (például a stringtoInt konverter), és a mezők esetében általában konstansok az ön kódja szerint (például az autótípus statikus lehet, ha csak normál autót gyártunk).

Most megvizsgáljuk az összes különféle esetet, amikor a kódolása rosszul fordulhat elő, és megvizsgáljuk a kiküszöbölési lehetőségeket.

1. probléma: Olyan oldalt hívsz, amely nem létezik

Találtunk néhány olyan esetet, amikor a felhasználók statikus és nem statikus módszereket alkalmaztak egymással. Amikor ezt megtesszük, vigyázzunk arra, hogy milyen módszer hívja mi (statikus vagy nem). Vessen egy pillantást a következő kódra:

 private java.util.List someMethod () {/ * Some Code * / return someList; } nyilvános statikus érvénytelen fő (karakterlánc [] strArgs) {// A következő állítás okozza a hibát. Tudod miért .. java.util.List someList = someMethod (); } 

A statikus módszer itt valamelyikMethod hívása. Objektum-orientált programozás során az adatokat beágyazzuk azokkal az adatokkal, amelyeken működni akarunk. Itt, objektum nélkül, nincsenek példányadatok, és noha a példánymódszerek léteznek az osztálydefiníció részeként, mindig léteznie kell egy objektumpéldánynak, amely adatot szolgáltat nekik.

Tehát összefoglalva: nem hívhat valamit, amely nem létezik. Mivel esetleg nem hozott létre objektumot, a nem statikus módszer még nem létezik. Másrészt azonban statikus módszer létezik (a meghatározás miatt).

2. kiadás: A módszerek nem statikusak

Ha módszereket hív fel a statikus fő módszeréből, anélkül, hogy a metódusok példányát létrehozná, akkor hibaüzenet jelenik meg. Itt ugyanaz az elv érvényes; nem férhet hozzá valamihez, ami nem létezik.

 public class BookStoreApp2 {// állandókat tartalmaz a beállításokhoz. Szkenner bemenet = új szkenner (System.in); nyilvános statikus érvénytelen fő (String [] args) {BookStoreItem [] elem; // tömb elem deklarálása = új BookStoreItem [10]; // tömb inicializálása int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <tétel.hossz; i ++) {} // kapcsoló végének befejezése} // a hurok vége a (int i = 0; i <tétel.hossz; i ++) {} // vége of for} // a fő módszer vége 

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

Ezért, ha egy ilyen helyzetet szeretne megkerülni, használhat építőt. Például átveheti a main () módszer tartalmát, és elhelyezheti azokat egy konstruktor belsejében.

 public BookStoreApp2 () {// Helyezze ide a fő módszer tartalmát} Ezt követően tegye a következőt a fő () módszer belsejében: public void main (String [] args) {new BookStoreApp2 (); } 

Ha ezek a tippek nem működnek az Ön kódján, vagy a kódja eltér, akkor szem előtt kell tartania a statikus osztályok és módszerek alapelveit, és ellenőriznie kell újra a kódot, hogy megbizonyosodjon arról, hogy az alapelvet nem sértik meg.

Érdekes Cikkek