Menu

Metody w Javie: jak definiować i wywoływać metody

Czym jest metoda w Javie, jak ją zadeklarować i wywołać, wartości zwracane a void, statyczna metoda main i jak metody porządkują kod i pozwalają używać go wielokrotnie.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Po co są metody

Metoda to nazwany blok kodu, który możesz uruchomić, kiedy tylko wywołasz jego nazwę. Zamiast pisać w kółko te same linie, piszesz je raz w metodzie i wywołujesz ją tyle razy, ile potrzebujesz. Dzięki temu programy są krótsze, łatwiejsze do czytania i dużo łatwiejsze do poprawiania: zmieniasz logikę w jednym miejscu, a każde wywołanie dostaje aktualizację.

Z metod już korzystasz: System.out.println(...) to wywołanie metody, tak samo jak list.size(). Teraz napiszesz własne.

Deklarowanie i wywoływanie metody

Deklaracja metody ma cztery części: typ zwracany, nazwę, parę nawiasów (na parametry) i ciało w nawiasach klamrowych. Oto najmniejszy przydatny przykład, czyli metoda, która wykonuje pracę i nic nie zwraca:

Przeczytaj części static void printGreeting():

  • static: pozwala main wywołać ją bezpośrednio, bez tworzenia obiektu (więcej o tym niżej).
  • void: ta metoda nie zwraca wartości.
  • printGreeting: nazwa, której używasz do wywołania.
  • (): puste nawiasy oznaczają, że metoda nie przyjmuje danych.

Metodę wywołujesz, pisząc jej nazwę, a po niej nawiasy. Dwa wywołania w main uruchamiają ciało dwa razy, więc powitanie wypisuje się dwukrotnie.

Zwracanie wartości

Większość metod coś oblicza i oddaje wynik przez return. Typ zwracany przed nazwą mówi, jaki rodzaj wartości wychodzi z metody, tutaj int:

square(5) daje 25, które możesz zapisać w zmiennej, wypisać albo użyć w większym wyrażeniu: wywołanie metody zastępuje wartość, którą ona zwraca. Gdy tylko wykona się return, metoda się kończy, a sterowanie wraca do wywołującego. Kod po return na tej samej ścieżce nigdy się nie wykona.

Typ zwracany i zwracana wartość muszą się zgadzać: typ danych, który deklarujesz, to rodzaj wartości, którą metoda obiecuje oddać. Zadeklarowanie int i próba return "text"; to błąd kompilacji, bo kompilator pilnuje tej umowy.

void a typ zwracany

Podział jest prosty: użyj prawdziwego typu zwracanego, gdy wywołujący potrzebuje wartości, a void, gdy metoda tylko coś robi (wypisuje, zapisuje, zmienia stan).

void logMessage(String msg)   // wykonuje pracę, nic nie zwraca
int  add(int a, int b)        // oblicza wartość, której używa wywołujący

Częsty błąd początkujących to próba użycia "wyniku" metody void:

int x = printGreeting();   // błąd kompilacji: printGreeting() zwraca void

Nie ma wartości do przypisania, więc to się nie skompiluje. Jeśli chcesz dostać wynik metody void, to znak, że powinna ona coś zwracać.

Metody z rozgałęzieniami i wczesnym return

Możesz wykonać return w więcej niż jednym miejscu. Wczesne zwracanie, gdy tylko znasz odpowiedź, często czyta się łatwiej niż zagnieżdżanie wszystkiego w else:

Ponieważ każde return od razu kończy metodę, wygrywa pierwszy pasujący warunek. Pilnuj tylko, by każda ścieżka w metodzie zwracającej wartość kończyła się return. Jeśli któraś gałąź może przejść dalej bez zwrócenia wartości, kompilator zgłosi "missing return statement". Końcowe return "F"; obsługuje tutaj ten przypadek.

Co oznacza tu static

Zwróć uwagę, że każda metoda powyżej jest static. Metoda static należy do samej klasy, a nie do obiektu, więc main (też static) może ją wywołać bezpośrednio po nazwie. Bez static metoda należy do instancji i do jej wywołania potrzebny byłby obiekt.

Na razie, dopóki piszesz małe programy, których logika jest obok main, oznaczaj metody pomocnicze jako static, żeby dało się je wywoływać tak samo. Gdy zaczniesz budować własne klasy i obiekty, napiszesz też metody niestatyczne (instancyjne), ale to temat rozdziału o klasach.

Zmienne lokalne zostają w metodzie

Zmienne zadeklarowane w metodzie istnieją tylko tam. Powstają, gdy metoda się uruchamia, i znikają, gdy zwraca wynik. Wywołujący nigdy ich nie widzi:

total i i żyją w całości wewnątrz sumTo. Jedyne, co wychodzi poza metodę, to wartość zwracana przez return. Ta izolacja to zaleta: każda metoda jest samodzielną jednostką, którą możesz analizować bez obaw, że jej tymczasowe zmienne wyciekną albo zderzą się z nazwami gdzie indziej.

Dalej: parametry metod

Każda metoda tutaj albo nie przyjmowała danych, albo przyjmowała jedną wartość. Prawdziwe możliwości daje przekazywanie danych do metody, a Java ma konkretne zasady dotyczące przekazywania argumentów, różnic między obiektami a typami prostymi i tego, jak dać parametrowi coś w rodzaju wartości domyślnej. O tym jest następna strona.

Najczęściej zadawane pytania

Czym jest metoda w Javie?

Metoda to nazwany blok kodu, który możesz uruchomić w dowolnej chwili, wywołując go po nazwie. Zbiera fragment pracy w jednym miejscu, więc możesz go używać wielokrotnie zamiast powtarzać te same linie. Metoda może przyjmować dane wejściowe (parametry) i oddawać wynik (wartość zwracaną) albo wykonać pracę i nic nie zwracać (void).

Jak utworzyć i wywołać metodę w Javie?

Zadeklaruj ją z typem zwracanym, nazwą i nawiasami: static int square(int n) { return n * n; }. Potem wywołaj ją po nazwie z argumentami w nawiasach: int result = square(5);. Metoda, która nic nie zwraca, używa void i wywołuje się ją jako osobną instrukcję, np. printGreeting();.

Co oznacza void w metodzie Javy?

void oznacza, że metoda nie zwraca żadnej wartości: wykonuje swoją pracę (np. wypisywanie) i nic nie oddaje wywołującemu. Wyniku metody void nie można przypisać do zmiennej. Jeśli metoda ma wytwarzać wartość używaną przez wywołującego, nadaj jej prawdziwy typ zwracany, np. int albo String, i użyj return.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ