Popravek: nestatične metode ni mogoče navesti iz statičnega konteksta

Številni programerji se pri kodiranju soočajo s sporočilom o napaki " Nestatične metode ni mogoče sklicevati iz statičnega konteksta ". To sporočilo o napaki ni specifično in se lahko pojavi v katerem koli IDE, če so pogoji za napako resnični.

Nestatične metode ni mogoče navesti iz statičnega konteksta

To je zelo pogosta napaka za začetnike, ko programer poskuša razred uporabiti "statično", ne da bi naredil primere razreda. Ob uporabi razreda, ki je statičen, morate izpolniti več pogojev. V tem članku bomo preučili več različnih primerov in vas napotili, kako uporabiti statični razred.

Kaj je statična metoda?

Če kateri koli način dodate ključno besedo 'statični', metoda postane znana kot statična metoda. Statična metoda sodi v razred, ne pa v objekt (kar je norma). Statična metoda se lahko enostavno prikliče brez pogoja za ustvarjanje primerka razreda.

Statičnih metod obstaja več različnih načinov, na primer z njim lahko spremenite člana statičnih podatkov in njegovo vrednost. Vendar pa še vedno obstajajo nekatere omejitve pri uporabi statične metode. Na primer, če želite dostopati do nestatičnih polj svojega razreda, morate uporabiti nestatično metodo. Če povzamemo, se statične metode uporabljajo zelo redko, vendar imajo svoje prednosti.

Tu je kratek primer, kako lahko naredimo statično metodo za spreminjanje lastnosti vseh predmetov.

 študenti razreda {int roll_no; Ime niza; static String college = "InformationTech"; statična sprememba ničnosti () {kolegij = "upravljanje";} študentje (int številka, ime niza); {roll_no = število; ime = ime_ sebe;} razveljavitev () {System.out.println (rollno + "" + ime + "" + kolegij);} javni statični void main (String args []) {Students.change (); Študenti stu_1 = novi Študenti (100, "Mehiški"); Študenti stu_2 = novi Študenti (202, "Ameriški"); Študenti stu_3 = novi študentje (309, "britanski"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Rezultat programa bo:

 100 mehiškega menedžmenta 202 ameriškega menedžmenta 309 britanskega menedžmenta 

Kakšna je razlika med razredom in primerom razreda?

Pomislite, da hodite po ulici in zagledate avto. Zdaj takoj veste, da gre za avtomobil, tudi če ne veste, kakšen je njegov model ali tip. To je zato, ker veste, da to spada v razred 'avtomobilov', ki ga že poznate. Predstavljajte si razred kot predlogo ali idejo.

Ko se približujete bližje, vidite model in znamko avtomobila. Tu prepoznate 'primerek' razreda 'avtomobil'. Tu bodo podrobno predstavljene vse lastnosti; kolesa, konjske moči, platišča itd.

Primer lastnosti je lahko, da razred 'avtomobil' navaja, da bi morali imeti vsi avtomobili kolesa. Avtomobil, ki ga vidite (primerek avtomobilskega razreda) ima alu platišča.

V objektno usmerjenem programiranju razred definirate sami, znotraj razreda pa definirate polje tipa 'color'. Kadar koli je razred instanciran, se pomnilnik samodejno rezervira za barvo ob izhodu in pozneje, lahko temu dodate določeno vrednost (na primer rdečo). Ker so atributi, kot so ti, specifični, so nestatični.

Nasprotno pa se statične metode in polja delijo z vsemi instancami. Izdelani so za vrednost ali elemente, ki so značilni za razred in ne za sam primerek. Za metode so lahko globalne metode (na primer pretvornik stringtoInt), pri poljih pa so ponavadi konstante glede na vašo kodo (na primer, tip avtomobila je lahko statičen, če izdelujete samo običajne avtomobile).

Zdaj si bomo ogledali vse različne primere, v katerih lahko vaše kodiranje gre narobe, in videli rešitve za njihovo odpravljanje.

1. vprašanje: kličete nekaj, kar ne obstaja

Naleteli smo na nekaj primerov, ko so uporabniki med seboj uporabljali statične in nestatične metode. Ko to storimo, morate biti previdni, kakšen način kliče kaj (v smislu statičnega ali ne). Oglejte si to kodo:

 zasebna java.util.List someMethod () {/ * Some Code * / vrni nekajList; } javni statični void main (String [] strArgs) {// Naslednji stavek povzroči napako. Veste zakaj .. java.util.List someList = someMethod (); } 

Tukaj statična metoda kliče someMethod. V objektno usmerjeno programiranje podatke zabeležimo skupaj s podatki, s katerimi želimo delovati. Tukaj brez predmeta ni nobenih primerkov podatkov, in medtem ko metode primerka obstajajo kot del definicije razreda, mora biti vedno objektni primerek, ki jim bo posredoval podatke.

Če povzamem, ne morete poklicati nečesa, kar ne obstaja. Ker morda niste ustvarili predmeta, nestatična metoda še ne obstaja. Po drugi strani pa bo statična metoda vedno obstajala (zaradi definicije).

2. vprašanje: Metode niso statične

Če kličete metode iz glavne metode Static, ne da bi ustvarili primerek metod, boste dobili sporočilo o napaki. Tu velja isto načelo; ne morete dostopati do nečesa, kar ne obstaja.

 javni razred BookStoreApp2 {// konstante za možnosti Scanner input = new Scanner (System.in); javni statični void main (String [] args) {BookStoreItem [] element; // razglasitev array item = nov BookStoreItem [10]; // inicializiranje array int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // konec izjave stikala} // konec zanke za (int i = 0; i <item.length; i ++) {} // konec of for} // konec glavne metode 

Tu v tej kodi morate pretvoriti tako metode printMenu () kot getUserChoice () v statične metode.

Če želite obiti takšno situacijo, lahko namesto tega uporabite konstruktor . Na primer, lahko vzamete vsebino svoje glavne () metode in jih postavite znotraj konstruktorja.

 public BookStoreApp2 () {// Tukaj vstavite vsebino glavne metode} Potem naredite naslednje v svoji glavni () metodi: public void main (String [] args) {new BookStoreApp2 (); } 

Če ti nasveti ne delujejo na vašo kodo ali je vaša koda drugačna, upoštevajte osnovna načela statičnih razredov in metod ter ponovno preverite kodo, da se prepričate, da osnovno načelo ne krši.

Zanimivi Članki