Rettelse: Ikke-statisk metode Der kan ikke henvises til fra en statisk sammenhæng

Mange programmerere står over for fejlmeddelelsen ' Ikke-statisk metode kan ikke henvises fra en statisk kontekst ', når de koder. Denne fejlmeddelelse er ikke specifik og kan forekomme i enhver IDE, hvis betingelserne for fejlen er sandt.

Ikke-statisk metode kan ikke henvises til fra en statisk sammenhæng

Dette er en meget almindelig fejltagelse for begyndere, hvor programmereren forsøger at bruge en klasse 'statisk' uden at gøre et eksempel på klassen. Der er flere betingelser, som skal være opfyldt, når du bruger en statisk klasse. I denne artikel vil vi gennemgå flere forskellige sager og vejlede dig om, hvordan du bruger en statisk klasse.

Hvad er en statisk metode?

Tilføjelse af nøgleordet 'statisk' til enhver metode gør metoden kendt som en statisk metode. En statisk metode hører til klassen snarere end at høre til et objekt (hvilket er normen). En statisk metode kan let påberåbes uden betingelsen af ​​at oprette et eksempel på en klasse.

Der er flere forskellige anvendelser af statiske metoder, f.eks. Ved at bruge det, kan du ændre et statisk datamedlem og dets værdi. Der er dog stadig nogle begrænsninger, når man bruger en statisk metode. Hvis du f.eks. Vil have adgang til ikke-statiske felter i din klasse, skal du bruge en ikke-statisk metode. Så for at opsummere bruges statiske metoder meget sparsomt, men de har deres fordele.

Her er et kort eksempel på, hvordan en statisk metode kan laves til at ændre egenskaberne for alle objekter.

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

Programmets output vil være:

 100 mexicansk ledelse 202 amerikansk ledelse 309 britisk ledelse 

Hvad er forskellen mellem en klasse og forekomst af en klasse?

Tror du går på gaden og ser en bil. Nu ved du straks, at dette er en bil, selvom du ikke ved, hvad der er dens model eller type. Dette skyldes, at du ved, at dette hører til klassen af ​​"biler", som du allerede kender. Tænk på klasse her som en skabelon eller en idé.

Når du nærmer dig, ser du modellen og mærket af bilen. Her genkender du 'forekomsten' af klassen 'bil'. Her vil alle egenskaber være til stede i detaljer; hjulene, hestekræfter, fælge osv.

Et eksempel på egenskaber kan være, at klassen 'bil' siger, at alle biler skal have hjul. Den bil, du ser (et eksempel på bilklassen) har legeringsfælge.

I objektorienteret programmering definerer du klassen selv og inde i klassen definerer du et felt af typen 'farve'. Hver gang klassen er øjeblikkelig, er hukommelse automatisk reserveret til farven på backend og senere, kan du give dette en bestemt værdi (for eksempel rød). Da egenskaber som disse er specifikke, er de ikke-statiske.

I modsætning hertil deles statiske metoder og felter med alle tilfælde. Disse er lavet til værdi eller genstande, der er specifikke for klassen og ikke selve instansen. For metoder kan der være globale metoder (for eksempel stringtoInt-konverter) og for felter, de er normalt konstanter i henhold til din kode (for eksempel kan biltypen være statisk, hvis du kun fremstiller normale biler).

Nu skal vi se på alle de forskellige tilfælde, hvor din kodning kan gå galt og se, hvordan du løser dem.

Udgave 1: Du ringer til noget, der ikke findes

Vi stødte på nogle tilfælde, hvor brugere brugte både statiske og ikke-statiske metoder sammen. Når vi gør dette, skal du være forsigtig med, hvilken metode der kalder hvad (med hensyn til statisk eller ej). Se på følgende kode:

 privat java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// Følgende udsagn forårsager fejlen. Du ved hvorfor .. java.util.List someList = someMethod (); } 

Her kalder den statiske metode nogleMethod. I objektorienteret programmering indkapsler vi dataene sammen med de data, som vi vil arbejde på. Her, uden et objekt, er der ingen forekomstdata, og selvom forekomstmetoderne findes som en del af klassedefinitionen, skal der altid være en objektforekomst til at levere data til dem.

Så for at opsummere, kan du ikke kalde noget, der ikke findes. Da du muligvis ikke har oprettet et objekt, findes den ikke-statiske metode endnu ikke. På den anden side vil der dog altid findes en statisk metode (på grund af definitionen).

Udgave 2: Metoder fremstilles ikke statisk

Hvis du påberåber dig metoder fra din statiske hovedmetode uden at oprette en forekomst af metoderne, får du en fejlmeddelelse. Her gælder det samme princip; du kan ikke få adgang til noget, der ikke findes.

 public class BookStoreApp2 {// konstanter til indstillinger Scannerinput = ny Scanner (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 ++) {} // ende af switch-erklæring} // end for for loop for (int i = 0; i <item.length; i ++) {} // end af for} // slutningen af ​​hovedmetoden 

Her i denne kode skal du konvertere både metoderne printMenu () og getUserChoice () til statiske metoder.

Derfor, hvis du vil omgå en situation som denne, kan du i stedet bruge en konstruktør . For eksempel kan du tage indholdet af din hovedmetode () og placere dem inde i en konstruktør.

 public BookStoreApp2 () {// Sæt indholdet af hovedmetoden her} Når du har gjort dette, skal du gøre følgende inden for din main () -metode: public void main (String [] args) {new BookStoreApp2 (); } 

Hvis disse tip ikke fungerer på din, eller hvis din kode ikke er anderledes, skal du huske de grundlæggende principper for statiske klasser og metoder og kontrollere din kode igen for at sikre dig, at det grundlæggende princip ikke overtrædes.

Interessante Artikler