Poprawka: metoda statyczna nie może być przywoływana z kontekstu statycznego

Wielu programistów napotyka komunikat o błędzie „ Nie można przywoływać metody niestatycznej ze statycznego kontekstu ” podczas kodowania. Ten komunikat o błędzie nie jest konkretny i może wystąpić w dowolnym środowisku IDE, jeśli warunki błędu są spełnione.

Metoda niestatyczna nie może być przywoływana z kontekstu statycznego

Jest to bardzo powszechny błąd dla początkujących, gdy programista próbuje użyć klasy „statycznie” bez tworzenia instancji klasy. Istnieje kilka warunków, które należy spełnić, gdy używasz klasy, która jest statyczna. W tym artykule omówimy kilka różnych przypadków i poprowadzimy Cię, jak używać klasy statycznej.

Co to jest metoda statyczna?

Dodanie słowa kluczowego „static” do dowolnej metody powoduje, że metoda ta jest znana jako metoda statyczna. Metoda statyczna należy do klasy, a nie do obiektu (co jest normą). Metodę statyczną można łatwo wywołać bez warunku utworzenia instancji klasy.

Istnieje kilka różnych zastosowań metod statycznych, na przykład, używając go, możesz zmienić element danych statycznych i jego wartość. Jednak nadal istnieją pewne ograniczenia przy stosowaniu metody statycznej. Na przykład, jeśli chcesz uzyskać dostęp do pól niestatycznych swojej klasy, musisz użyć metody niestatycznej. Podsumowując, metody statyczne są stosowane bardzo oszczędnie, ale mają swoje zalety.

Oto krótki przykład, w jaki sposób można wykonać metodę statyczną w celu zmiany właściwości wszystkich obiektów.

 uczniowie klasy {int roll_no; Nazwa łańcucha; static String college = "InformationTech"; static void change () {college = „Management";} Studenci (numer wewnętrzny, nazwa łańcucha String) {roll_no = liczba; name = name_self;} void display () {System.out.println (rollno + "" + name + "" + college);} public static void main (String args []) {Students.change (); Studenci stu_1 = nowi studenci (100, „meksykańscy”); Studenci stu_2 = nowi studenci (202, „amerykański”); Studenci stu_3 = nowi uczniowie (309, „brytyjski”); stu_1.display (); stu_2.display (); stu_3.display ();}} 

Dane wyjściowe programu będą:

 100 Zarządzanie meksykańskie 202 Zarządzanie amerykańskie 309 Zarządzanie brytyjskie 

Jaka jest różnica między klasą a instancją klasy?

Myślisz, że idziesz ulicą i widzisz samochód. Teraz od razu wiesz, że to samochód, nawet jeśli nie wiesz, jaki jest jego model lub typ. Jest tak, ponieważ wiesz, że należy on do klasy „samochodów”, o których już wiesz. Pomyśl o klasie tutaj jako szablonie lub pomyśle.

Zbliżając się, zobaczysz model i markę samochodu. Rozpoznajesz tutaj „przykład” klasowego „samochodu”. Tutaj wszystkie właściwości zostaną szczegółowo przedstawione; koła, moc, felgi itp.

Przykładem właściwości może być to, że klasa „samochód” stwierdza, że ​​wszystkie samochody powinny mieć koła. Samochód, który widzisz (przykład klasy samochodu) ma felgi aluminiowe.

W programowaniu obiektowym definiujesz klasę samodzielnie, a wewnątrz klasy definiujesz pole typu „kolor”. Za każdym razem, gdy tworzona jest instancja klasy, pamięć jest automatycznie rezerwowana na kolor w wewnętrznej bazie danych, a później możesz nadać tej konkretnej wartości (na przykład czerwony). Ponieważ takie atrybuty są specyficzne, nie są one statyczne.

Natomiast metody statyczne i pola są współużytkowane ze wszystkimi instancjami. Są one tworzone dla wartości lub elementów specyficznych dla klasy, a nie dla samej instancji. W przypadku metod mogą istnieć metody globalne (na przykład konwerter stringtoInt), aw przypadku pól są one zwykle stałymi zgodnie z twoim kodem (na przykład typ samochodu może być statyczny, jeśli produkujesz tylko normalne samochody).

Teraz przyjrzymy się wszystkim różnym przypadkom, w których kodowanie może pójść źle, i zobaczymy sposoby ich rozwiązania.

Problem 1: Dzwonisz do czegoś, co nie istnieje

Napotkaliśmy kilka przypadków, w których użytkownicy stosowali zarówno metody statyczne, jak i niestatyczne. Kiedy to robimy, powinieneś uważać, która metoda wywołuje to (pod względem statycznym czy nie). Spójrz na następujący kod:

 private java.util.List someMethod () {/ * Some Code * / return someList; } public static void main (String [] strArgs) {// Poniższa instrukcja powoduje błąd. Wiesz dlaczego .. java.util.List someList = someMethod (); } 

Tutaj metoda statyczna wywołuje someMethod. W programowaniu obiektowym hermetyzujemy dane wraz z danymi, na których chcemy operować. Tutaj, bez obiektu, nie ma danych instancji i chociaż metody instancji istnieją jako część definicji klasy, zawsze powinna istnieć instancja obiektu do dostarczania im danych.

Podsumowując, nie można nazwać czegoś, co nie istnieje. Ponieważ mógłbyś nie utworzyć obiektu, metoda niestatyczna jeszcze nie istnieje. Jednak z drugiej strony zawsze będzie istnieć metoda statyczna (z definicji).

Problem 2: Metody nie są statyczne

Jeśli wywołujesz metody z głównej metody statycznej bez tworzenia instancji metod, pojawi się komunikat o błędzie. Tutaj obowiązuje ta sama zasada; nie możesz uzyskać dostępu do czegoś, co nie istnieje.

 klasa publiczna BookStoreApp2 {// stałe dla opcji Wejście skanera = nowy skaner (System.in); public static void main (String [] args) {BookStoreItem [] item; // deklaracja elementu tablicy = new BookStoreItem [10]; // inicjowanie tablicy int itemType = -1; printMenu (); getUserChoice (); for (int i = 0; i <item.length; i ++) {} // end of switch statement} // end of for loop for (int i = 0; i <item.length; i ++) {} // end z for} // koniec głównej metody 

W tym kodzie należy przekonwertować zarówno metody printMenu (), jak i getUserChoice () na metody statyczne.

Dlatego jeśli chcesz obejść taką sytuację, możesz zamiast tego użyć konstruktora . Na przykład możesz wziąć zawartość swojej metody main () i umieścić ją w konstruktorze.

 public BookStoreApp2 () {// Umieść tutaj treść metody main} Po wykonaniu tej czynności, wykonaj następujące czynności w metodzie main (): public void main (String [] args) {new BookStoreApp2 (); } 

Jeśli te wskazówki nie działają na twoim kodzie lub twój kod jest inny, powinieneś pamiętać o podstawowych zasadach klas i metod statycznych i ponownie sprawdzić kod, aby upewnić się, że podstawowa zasada nie jest naruszana.

Ciekawe Artykuły