Korjaus: Ei-staattiseen menetelmään ei voida viitata staattisesta tilanteesta

Monet ohjelmoijat kohtaavat virheviestin ' Ei-staattiseen menetelmään ei voida viitata staattisesta tilanteesta ' koodattaessa. Tämä virheviesti ei ole tarkka, ja sitä voi esiintyä missä tahansa IDE: ssä, jos virheen ehdot ovat totta.

Ei-staattiseen menetelmään ei voida viitata staattisessa tilanteessa

Tämä on hyvin yleinen virhe aloittelijoille, joissa ohjelmoija yrittää käyttää luokkaa 'staattisesti' tekemättä luokan esiintymää. On olemassa useita ehtoja, jotka on täytettävä, kun käytät staattista luokkaa. Tässä artikkelissa käydään läpi useita erilaisia ​​tapauksia ja opastamme sinua staattisen luokan käyttämisessä.

Mikä on staattinen menetelmä?

Avainsanan 'staattinen' lisääminen mihin tahansa menetelmään tekee menetelmän tunnetuksi staattisena menetelmänä. Staattinen menetelmä kuuluu luokkaan sen sijaan, että kuuluisi objektiin (mikä on normi). Staattiseen menetelmään voidaan helposti vedota edellyttämättä luokan esiintymän luomista.

Staattisia menetelmiä on useita erilaisia, esimerkiksi käyttämällä staattista datajäsentä ja sen arvoa voidaan muuttaa. Staattista menetelmää käytettäessä on kuitenkin vielä joitain rajoituksia. Jos esimerkiksi haluat käyttää luokan epästaattisia kenttiä, sinun on käytettävä ei-staattista menetelmää. Joten yhteenvetona voidaan todeta, että staattisia menetelmiä käytetään erittäin harvoin, mutta niillä on etunaan.

Tässä on lyhyt esimerkki staattisesta menetelmästä, jolla voidaan muuttaa kaikkien objektien ominaisuuksia.

 luokan oppilaat {int roll_no; Merkkijono nimi; staattinen merkkijonoyliopisto = "InformationTech"; staattinen void muutos () {college = “Management";} Opiskelijat (int numero, merkkijono_navan) {roll_no = numero; nimi = name_self;} tyhjä näyttö () {System.out.println (rollno + "" + name + "" + korkeakoulu);} julkinen staattinen tyhjä main (merkkijonot []) {Opiskelijat.vaihto (); Opiskelijat stu_1 = uudet opiskelijat (100, "meksikolainen"); Opiskelijat stu_2 = uudet opiskelijat (202, "amerikkalainen"); Opiskelijat stu_3 = uudet opiskelijat (309, "brittiläinen"); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Ohjelman tuotos on:

 100 Mexican Management 202 American Management 309 British Management 

Mikä on ero luokan ja luokan esiintymisen välillä?

Ajattele, että kävelet kadulla ja näet auton. Nyt tiedät heti, että tämä on auto, vaikka et tiedä mikä on sen malli tai tyyppi. Tämä johtuu siitä, että tiedät, että tämä kuuluu "autojen" luokkaan, josta jo tunnet. Ajattele luokkaa täällä mallina tai ideana.

Nyt kun siirryt lähemmäksi, näet mallin ja auton merkin. Tässä tunnustat luokan 'auto' 'esiintymän'. Tässä kaikki ominaisuudet ovat läsnä yksityiskohtaisesti; pyörät, hevosvoima, vanteet jne.

Esimerkki ominaisuuksista voi olla se, että luokan 'auto' mukaan kaikissa autoissa tulisi olla pyörät. Autossa, jota näet (esimerkki autoluokasta), on alumiinivanteet.

Olio-ohjelmoinnissa määrität luokan itse ja luokan sisällä määrität kentän, jonka tyyppi on 'väri'. Aina kun luokka toteutetaan, muisti varataan automaattisesti värin taustalla ja myöhemmin, voit antaa tälle tietyn arvon (esimerkiksi punainen). Koska nämä ominaisuudet ovat erityisiä, ne ovat epästaattisia.

Sitä vastoin staattiset menetelmät ja kentät jaetaan kaikkien ilmentymien kanssa. Ne tehdään luokalle ominaisarvoon tai kohteisiin, eivät itse ilmentymään. Menetelmille voi olla globaaleja menetelmiä (esimerkiksi stringtoInt-muunnin), ja kentät ovat yleensä vakioita koodisi mukaan (esimerkiksi autotyyppi voi olla staattinen, jos valmistat vain normaaleja autoja).

Nyt tarkastelemme kaikkia erilaisia ​​tapauksia, joissa koodauksesi voi mennä pieleen, ja tarkastelemme kiertotapoja niiden korjaamiseksi.

Numero 1: Soitat jotain, jota ei ole olemassa

Koimme tapauksia, joissa käyttäjät käyttivät toistensa kanssa sekä staattisia että ei-staattisia menetelmiä. Kun teemme tämän, sinun tulee olla varovainen, mikä menetelmä kutsuu mitä (staattisen vai ei). Katso seuraava koodi:

 yksityinen java.util.List someMethod () {/ * Some Code * / palauttaa someList; } julkinen staattinen void main main (merkkijono [] strArgs) {// Seuraava lause aiheuttaa virheen. Tiedätkö miksi .. java.util.List someList = someMethod (); } 

Täällä staattinen menetelmä kutsuu someMethod. Objektisuuntautuneessa ohjelmoinnissa kapseloimme datan yhdessä datan kanssa, jota haluamme käyttää. Täällä ilman objektia ei ole ilmentymätietoja ja vaikka ilmentymismenetelmät ovatkin osana luokan määritelmää, objektien ilmentymän on aina oltava, jotta heille toimitetaan tietoja.

Joten yhteenvetona, et voi kutsua jotain, jota ei ole olemassa. Koska et ole ehkä luonut objektia, ei-staattista menetelmää ei ole vielä olemassa. Toisaalta staattinen menetelmä on kuitenkin aina olemassa (määritelmän takia).

Numero 2: Menetelmistä ei tehdä staattisia

Jos käytät menetelmiä staattiselta päämenetelmältä luomatta menetelmien esiintymää, saat virheilmoituksen. Tässä pätee sama periaate; et voi käyttää jotain mitä ei ole olemassa.

 julkinen luokka BookStoreApp2 {// vakioita vaihtoehdoille Skanneritulo = uusi skanneri (System.in); julkinen staattinen void main main (merkkijono [] merkinnät) {BookStoreItem [] alkio; ​​// ryhmäjoukon ilmoittaminen = uusi BookStoreItem [10]; // ryhmän alustaminen int itemType = -1; printMenu (); getUserChoice (); varten (int i = 0; i <esineen pituus; i ++) {} // kytkimen loppupiste} // silmukan loppu varten (int i = 0; i <esineen pituus; i ++) {} // loppu of for} // päämenetelmän loppu 

Tässä koodissa sinun on muutettava sekä printMenu () - että getUserChoice () -menetelmät staattisiksi menetelmiksi.

Siksi, jos haluat kiertää tällaisen tilanteen, voit käyttää sen sijaan rakentajaa . Voit esimerkiksi ottaa pää () -menetelmäsi sisällön ja sijoittaa ne rakentajan sisään.

 public BookStoreApp2 () {// Pane päämenetelmän sisältö tähän} Suoritettuaan tämän, tee seuraava pää () -menetelmäsi sisällä: public void main (String [] args) {new BookStoreApp2 (); } 

Jos nämä vinkit eivät toimi omalla koodillasi tai koodisi on erilainen, sinun tulisi pitää mielessä staattisten luokkien ja menetelmien perusperiaatteet ja tarkistaa koodi uudelleen varmistaaksesi, että perusperiaatetta ei loukata.

Mielenkiintoisia Artikkeleita