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: pozwalamainwywoł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.