Pataisymas: Neįtatinis metodas negali būti naudojamas remiantis statiniu kontekstu

Daugelis programuotojų susiduria su klaidos pranešimu „Į statinį metodą negalima remtis statiniame kontekste “, kai jie koduojami. Šis klaidos pranešimas nėra konkretus ir gali atsirasti bet kuriame IDE, jei klaidos sąlygos yra teisingos.

Ne statinis metodas negali būti naudojamas remiantis statiniu kontekstu

Tai labai dažna klaida pradedantiesiems, kai programuotojas bando klasę naudoti „statiškai“, nedarydamas klasės egzemplioriaus. Yra kelios sąlygos, kurias būtina įvykdyti, kai naudojate statinę klasę. Šiame straipsnyje apžvelgsime keletą skirtingų atvejų ir pateiksime jums, kaip naudoti statinę klasę.

Kas yra statinis metodas?

Pridedant raktinį žodį „statinis“ prie bet kurio metodo, metodas žinomas kaip statinis metodas. Statinis metodas priklauso klasei, o ne priklauso objektui (o tai yra norma). Statiniu metodu galima nesunkiai remtis nesukuriant klasės egzemplioriaus.

Yra keletas skirtingų statinių metodų naudojimo būdų, pavyzdžiui, naudodamiesi juo, galite pakeisti statinio duomenų narį ir jo vertę. Tačiau naudojant statinį metodą vis dar yra tam tikrų apribojimų. Pvz., Jei norite pasiekti nestatiškus savo klasės laukus, turite naudoti nestatinį metodą. Apibendrinant galima pasakyti, kad statiniai metodai naudojami labai atsargiai, tačiau jie turi savo privalumų.

Čia yra trumpas pavyzdys, kaip galima padaryti statinį metodą, norint pakeisti visų objektų savybes.

 klasės mokiniai {int roll_no; Stygos pavadinimas; statinė stygų kolegija = „InformationTech“; statinis negaliojantis pokytis () {kolegija = „vadyba";} studentai (vidinis skaičius, eilutės vardas_ savitvardis) {ritinio Nr. = skaičius; vardas = vardas_ savanaudis;} negaliojantis ekranas () {System.out.println (rollno + "" + vardas + "" + koledžas);} viešas statinis tuščias pagrindinis (String args []) {Students.change (); Studentai stu_1 = nauji studentai (100, „meksikiečių“); Studentai stu_2 = nauji studentai (202, „amerikietis“); Studentai stu_3 = nauji studentai (309, „britas“); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Programos išvestis bus:

 100 Meksikos valdymas 202 Amerikos valdymas 309 Didžiosios Britanijos valdymas 

Kuo skiriasi klasė nuo klasės egzemplioriaus?

Pagalvok, kad eini gatve ir matai mašiną. Dabar jūs iškart žinote, kad tai yra automobilis, net jei nežinote, koks jo modelis ar tipas. Taip yra todėl, kad jūs žinote, kad tai priklauso „automobilių“ klasei, kurią jūs jau žinote. Čia galvok apie klasę kaip šabloną ar idėją.

Dabar artėdami arčiau pamatysite automobilio modelį ir modelį. Čia jūs atpažįstate „automobilio“ klasės pavyzdį. Čia bus išsamiai aprašytos visos savybės; ratai, arklio galia, ratlankiai ir kt.

Savybių pavyzdys gali būti tai, kad klasės automobilis teigia, kad visi automobiliai turi turėti ratus. Automobiliui, kurį matote (automobilių klasės pavyzdys), yra lengvojo lydinio ratlankiai.

Objektinio programavimo metu klasę apibrėžiate patys, o klasės viduje - „spalvos“ tipo lauką. Vykdant klasę, atmintis automatiškai rezervuojama spalvoms užpakalinėje dalyje ir vėliau, jūs galite suteikti tam tikrą reikšmę (pavyzdžiui, raudoną). Kadangi šie požymiai yra specifiniai, jie nėra statiniai.

Priešingai, statiniai metodai ir laukai yra bendrinami su visais egzemplioriais. Jie yra skirti tam tikrai klasei, bet ne pačiam egzemplioriui. Metodams gali būti visuotiniai metodai (pvz., „StringtoInt“ keitiklis), o laukai - pagal jūsų kodą paprastai yra konstantos (pavyzdžiui, automobilio tipas gali būti statinis, jei gaminate tik įprastus automobilius).

Dabar apžvelgsime visus skirtingus atvejus, kai jūsų kodavimas gali suklysti, ir pamatysime jų sprendimo būdus.

1 klausimas: Jūs skambinate tam, ko nėra

Teko susidurti su kai kuriais atvejais, kai vartotojai tarpusavyje naudojosi ir statiniais, ir nestatiniais metodais. Kai tai darome, turėtumėte būti atsargūs, koks metodas vadina ką (kalbant apie statinį ar ne). Pažvelkite į šį kodą:

 private java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (eilutė [] strArgs) {// Šis teiginys sukelia klaidą. Žinai kodėl .. java.util.List someList = someMethod (); } 

Statinis metodas vadina „someMethod“. Objektiniame programavime duomenis apjungiame kartu su duomenimis, kuriais norime veikti. Be objekto nėra egzempliorių duomenų ir nors egzempliorių metodai egzistuoja kaip klasės apibrėžimo dalis, visada turėtų būti objekto egzempliorius, kuris jiems pateiktų duomenis.

Taigi apibendrinant, negalima vadinti to, kas neegzistuoja. Kadangi galbūt nesukūrėte objekto, nestatinis metodas dar neegzistuoja. Tačiau, kita vertus, statinis metodas visada egzistuos (dėl apibrėžimo).

2 klausimas: Metodai nėra statiniai

Jei naudojate metodus iš savo statinio pagrindinio metodo nesukurdami metodų egzemplioriaus, gausite klaidos pranešimą. Čia galioja tas pats principas; jūs negalite pasiekti to, kas neegzistuoja.

 viešosios klasės „BookStoreApp2“ {// konstantos parinktims Skaitytuvo įvestis = naujas skaitytuvas („System.in“); public static void main (eilutės [] raidės) {BookStoreItem [] elementas; // masyvo elemento deklaravimas = naujas BookStoreItem [10]; // masyvo inicijavimas int itemType = -1; spausdintiMeniu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // jungiklio pabaigos pabaiga} // for loop (int i = 0; i <item.length; i ++) {} // end of for} // pagrindinio metodo pabaiga 

Šiame kode jūs turite konvertuoti abu metodus printMenu () ir getUserChoice () į statinius metodus.

Taigi, jei norite išspręsti tokią situaciją, galite naudoti konstruktorių . Pavyzdžiui, galite paimti pagrindinio () metodo turinį ir patalpinti jį konstruktoriaus viduje.

 public BookStoreApp2 () {// Įdėkite čia pagrindinio metodo turinį} Atlikę šį pagrindinio () metodo vidų, atlikite šiuos veiksmus: public void main (String [] args) {new BookStoreApp2 (); } 

Jei šie patarimai neveikia pagal jūsų kodą ar skiriasi, turėtumėte nepamiršti pagrindinių statinių klasių ir metodų principų ir dar kartą patikrinti kodą, kad įsitikintumėte, jog nepažeidžiamas pagrindinis principas.

Įdomios Straipsniai