Popravak: Nestatička metoda se ne može referencirati iz statičkog konteksta

Mnogi se programeri suočavaju s porukom o pogrešci ' Nestatička metoda se ne može referencirati iz statičkog konteksta ' kad ih kodiraju. Ova poruka o pogrešci nije specifična i može se pojaviti u bilo kojem IDE-u ako su uvjeti za pogrešku točni.

Nestatička metoda se ne može pozivati ​​iz statičkog konteksta

Ovo je vrlo česta pogreška za početnike gdje programer pokušava klasu koristiti 'statički', a da ne napravi ni jednu instancu klase. Nekoliko je uvjeta koje morate ispuniti kada koristite klasu koja je statična. U ovom ćemo članku proći kroz nekoliko različitih slučajeva i uputiti vas kako koristiti statičku klasu.

Što je statička metoda?

Dodavanjem ključne riječi "statički" bilo kojoj metodi metoda je poznata kao statička metoda. Statička metoda pripada klasi, a ne pripada nekom objektu (što je norma). Statička metoda može se lako pozvati bez uvjeta stvaranja instancije klase.

Na primjer, postoji nekoliko različitih upotreba statičkih metoda. Pomoću njih možete promijeniti statički član podataka i njegovu vrijednost. Međutim, i dalje postoje određena ograničenja pri korištenju statičke metode. Na primjer, ako želite pristupiti nestatičkim poljima svoje klase, morate koristiti nestatičku metodu. Ukratko, statičke metode se koriste vrlo rijetko, ali imaju svoje prednosti.

Evo kratkog primjera kako se može napraviti statička metoda za promjenu svojstva svih objekata.

 učenici razreda {int roll_no; Ime niza; statički niz struka = ​​"InformationTech"; static void change () {college = "Management";} Studenti (int broj, string string_name) {roll_no = broj; ime = name_self;} void display () {System.out.println (rollno + "" + ime + "" + fakultet);} javni statički void main (String args []) {Students.change (); Studenti stu_1 = novi Studenti (100, "Meksikanci"); Studenti stu_2 = novi Studenti (202, "Amerikanac"); Studenti stu_3 = novi studenti (309, "britanski"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Izlaz programa bit će:

 100 meksičkog menadžmenta 202 američkog menadžmenta 309 britanskog menadžmenta 

Kakva je razlika između klase i instance klase?

Mislite da hodate ulicom i vidite auto. Sada odmah znate da je ovo automobil čak i ako ne znate koji je njegov model ili tip. To je zato što znate da to spada u klasu "automobila" koje već znate. Ovdje klasu zamišljajte kao predložak ili ideju.

Kad se približavate, vidite model i marku automobila. Ovdje prepoznajete "primjerak" klase "automobil". Ovdje će se sva svojstva detaljno predstaviti; kotači, konjske snage, naplatci itd.

Primjer svojstava može biti da klasa 'automobil' kaže da svi automobili trebaju imati kotače. Automobil koji viđate (primjerci klase automobila) ima aluminijske naplatke.

U objektno orijentiranom programiranju klasu definirate sami, a unutar klase definirate polje tipa "boja". Kad god je klasa trenutačna, memorija se automatski rezervira za boju u pozadini i kasnije, možete joj dati određenu vrijednost (na primjer crvenu). Budući da su atributi poput ovih specifični, oni su nestatični.

Suprotno tome, statičke metode i polja dijele se sa svim instancama. Izrađene su za vrijednosti ili stavke koje su specifične za klasu, a ne za samu instancu. Za metode mogu postojati globalne metode (na primjer, pretvarač stringtoInt), a za polja su obično konstante prema vašem kodu (na primjer, tip automobila može biti statičan ako proizvodite samo uobičajene automobile).

Sada ćemo pogledati sve različite slučajeve u kojima vaše kodiranje može poći po zlu i vidjeti rješenja koja ih mogu popraviti.

Prvo izdanje: Vi zovete nešto što ne postoji

Naišli smo na neke slučajeve u kojima su korisnici međusobno koristili i statičke i nestatičke metode. Kad to učinimo, trebali biste biti oprezni kojim se metodama poziva što (u smislu statičkih ili ne). Pogledajte slijedeći kod:

 private java.util.List someMethod () {/ * Neki kod * / return someList; } javni statički void main (String [] strArgs) {// Sljedeća izjava uzrokuje pogrešku. Znate zašto .. java.util.List someList = someMethod (); } 

Ovdje se statična metoda zove nekiMethod. U objektno orijentiranom programiranju inkapsuliramo podatke zajedno s podacima na kojima želimo raditi. Ovdje bez objekta nema podataka instanci i dok metode instance postoje kao dio definicije klase, uvijek treba postojati objektna instanca koja im pruža podatke.

Dakle, ukratko, ne možete nazvati nešto što ne postoji. Budući da možda niste stvorili objekt, nestatička metoda još ne postoji. Međutim, s druge strane, statična metoda će uvijek postojati (zbog definicije).

2. izdanje: Metode nisu statične

Ako prizivate metode iz svoje glavne metode Static bez stvaranja instancije metoda, dobit ćete poruku o pogrešci. Ovdje vrijedi isti princip; ne možete pristupiti nečemu što ne postoji.

 javna klasa BookStoreApp2 {// konstante za opcije Ulaz skenera = novi skener (System.in); javna statička void glavna (String [] args) {BookStoreItem [] stavka; // proglašavanje array elementa = nova BookStoreItem [10]; // inicijalizacija array int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // kraj izjave prekidača} // kraj za petlju za (int i = 0; i <item.length; i ++) {} // kraj of for} // kraj glavne metode 

Ovdje u ovom kôdu morate pretvoriti i metode printMenu () i getUserChoice () u statičke metode.

Stoga, ako želite zaobići ovakvu situaciju, umjesto toga možete koristiti konstruktor . Na primjer, možete uzeti sadržaj glavne () metode i smjestiti ih u konstruktor.

 javna BookStoreApp2 () {// Ovdje stavite glavnu metodu} Nakon što to učinite, učinite sljedeće unutar svoje glavne () metode: public void main (String [] args) {new BookStoreApp2 (); } 

Ako ovi savjeti ne djeluju na vaš ili je vaš kod različit, trebate imati na umu osnovna načela statičkih klasa i metoda i ponovno provjeriti kôd kako biste bili sigurni da se osnovni princip ne krši.

Zanimljivi Članci