Fix: Ikke-statisk metode Kan ikke henvises fra en statisk kontekst

Mange programmerere møter feilmeldingen ' Ikke-statisk metode kan ikke henvises fra en statisk kontekst ' når de kodes. Denne feilmeldingen er ikke spesifikk og kan oppstå på en hvilken som helst IDE hvis betingelsene for feilen er sanne.

Ikke-statisk metode kan ikke refereres fra en statisk kontekst

Dette er en veldig vanlig feil for nybegynnere der programmereren prøver å bruke en klasse "statisk" uten å lage et eksempel på klassen. Det er flere betingelser som må oppfylles når du bruker en statisk klasse. I denne artikkelen vil vi gå gjennom flere forskjellige saker og veilede deg om hvordan du bruker en statisk klasse.

Hva er en statisk metode?

Å legge til nøkkelordet "statisk" til enhver metode gjør metoden kjent som en statisk metode. En statisk metode hører til klassen i stedet for å tilhøre et objekt (som er normen). En statisk metode kan lett påberopes uten betingelsen om å opprette en forekomst av en klasse.

Det er flere forskjellige bruksområder for statiske metoder, for eksempel ved å bruke den, kan du endre et statisk datamedlem og dets verdi. Imidlertid er det fortsatt noen begrensninger når du bruker en statisk metode. Hvis du for eksempel vil ha tilgang til ikke-statiske felt i klassen din, må du bruke en ikke-statisk metode. Så for å oppsummere, brukes statiske metoder veldig sparsomt, men de har fordelene.

Her er et kort eksempel på hvordan en statisk metode kan gjøres for å endre egenskapen til alle objekter.

 klasse studenter {int roll_no; Streng navn; statisk String college = "InformationTech"; statisk tomromskifte () {college = “Management”;} Studenter (int-nummer, String name_self) {roll_no = number; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + college);} public static void main (String args []) {Students.change (); Studenter stu_1 = nye studenter (100, "meksikansk"); Studenter stu_2 = new Students (202, "American"); Studenter stu_3 = nye studenter (309, "britisk"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Utgangen til programmet vil være:

 100 meksikansk ledelse 202 amerikansk ledelse 309 britisk ledelse 

Hva er forskjellen mellom en klasse og forekomst av en klasse?

Tror du går på gaten og ser en bil. Nå vet du med en gang at dette er en bil, selv om du ikke vet hva som er modell eller type. Dette fordi du vet at dette hører til klassen "biler" som du allerede vet om. Tenk på klassen her som en mal eller en idé.

Når du nå nærmer deg, ser du modellen og merke til bilen. Her gjenkjenner du 'forekomsten' av klassen 'bil'. Her vil alle egenskapene være tilstede i detalj; hjulene, hestekrefter, felger osv.

Et eksempel på egenskaper kan være at klassen 'bil' sier at alle biler skal ha hjul. Bilen du ser (et eksempel på bilklassen) har legeringsfelger.

I objektorientert programmering definerer du klassen selv og inne i klassen definerer du et felt av typen 'farge'. Hver gang klassen blir instantivert, blir minnet automatisk reservert for fargen på bakenden og senere, kan du gi dette en spesifikk verdi (for eksempel rød). Siden attributter som disse er spesifikke, er de ikke-statiske.

I kontrast deles statiske metoder og felt med alle forekomster. Disse er laget for verdi eller elementer som er spesifikke for klassen og ikke selve forekomsten. For metoder kan det være globale metoder (for eksempel stringtoInt-omformer) og for felt, de er vanligvis konstanter i henhold til koden din (for eksempel kan biltypen være statisk hvis du bare produserer normale biler).

Nå skal vi se på alle de forskjellige tilfellene der kodingen din kan gå galt og se løsningene for å fikse dem.

Utgave 1: Du ringer til noe som ikke eksisterer

Vi kom over noen tilfeller der brukere brukte både statiske og ikke-statiske metoder sammen. Når vi gjør dette, bør du være forsiktig med hvilken metode som kaller hva (når det gjelder statisk eller ikke). Ta en titt på følgende kode:

 privat java.util.Liste someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// Følgende påstand forårsaker feilen. Du vet hvorfor .. java.util.List someList = someMethod (); } 

Her kaller den statiske metoden someMethod. I objektorientert programmering innkapsler vi dataene sammen med dataene som vi ønsker å operere på. Her, uten et objekt, er det ingen forekomstdata, og mens forekomstmetodene eksisterer som en del av klassedefinisjonen, skal det alltid være et objektforekomst for å gi data til dem.

Så for å oppsummere, kan du ikke ringe noe som ikke eksisterer. Siden du kanskje ikke har opprettet et objekt, eksisterer ikke den ikke-statiske metoden ennå. På den annen side vil det imidlertid alltid være en statisk metode (på grunn av definisjon).

Utgave 2: Metoder er ikke laget statisk

Hvis du påkaller metoder fra din statiske hovedmetode uten å opprette en forekomst av metodene, vil du få en feilmelding. Her gjelder det samme prinsippet; du har ikke tilgang til noe som ikke eksisterer.

 public class BookStoreApp2 {// konstanter for alternativer Skannerinngang = ny skanner (System.in); public static void main (String [] args) {BookStoreItem [] item; // declaring array item = new BookStoreItem [10]; // initialiserende array int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // enden av switch-setningen} // end of for loop for (int i = 0; i <item.length; i ++) {} // end av for} // slutten av hovedmetoden 

Her i denne koden må du konvertere både metodene printMenu () og getUserChoice () til statiske metoder.

Derfor, hvis du vil omgå en situasjon som denne, kan du bruke en konstruktør i stedet. Du kan for eksempel ta innholdet i hovedmetoden din () og plassere dem inne i en konstruktør.

 public BookStoreApp2 () {// Sett innholdet i hovedmetoden her} Når du har gjort dette, gjør du følgende i hovedmetoden din (): public void main (String [] args) {new BookStoreApp2 (); } 

Hvis disse tipsene ikke fungerer på din eller koden din er annerledes, må du huske de grunnleggende prinsippene for statiske klasser og metoder og sjekke koden din på nytt for å forsikre deg om at grunnprinsippet ikke blir brutt.

Interessante Artikler