W tym artykule pokażę jak tworzyć metody w klasie i jak wykonywać działania w klasie. Przez działania rozumiem używanie metody stworzonych w klasie. W poprzednim artykule Wartości w pierwszej klasie pokazałem jak tworzyć i korzystać z pól w klasie. Więcej informacji można znaleźć w oficjalnej dokumentacji Java od Oracle – Using Objects.
Będę korzystał z klasy, która była w poprzednich artykułach, uzupełnię ją o metodę, czyli dodam działanie, które można wykonać na klasie.
public class Notebook {
int pages;
int pagesWritten;
int currentPage;
void goToPage(int page) {
currentPage = page;
}
}
W powyższym kodzie, działaniem, metodą jest void goToPage(int page) {}. Metoda ta korzysta ze zmiennej int currentPage, która jest polem w klasie, przechowuje wartości. Po co w ogóle wykonywać działania na klasie? Nie wystarczy, że przechowuje ona wartości? Niestety nie, wartości i działania w klasie są podstawowymi elementami, których używa programista Java.
Objaśnienie poszczególnych elementów od lewej do prawej:
void goToPage(int page) {} – deklaracja metody.
void – typ, wartość zwracana z metody
goToPage – nazwa metody
() – parametry metody
(int page) – parametr metody, w nawiasach
{} – ciało metody, między klamerkami
Powyżej pominąłem samą zawartość metody, czyli linijkę currentPage = page;, która jest ciałem metody. W ciele metody zawiera się kod, który sprawia, że metoda wykonuje działania, np. algorytm. Dodatkowo użyta została specjalna wartość zwracana void, która oznacza, że nic nie zwracamy z metody, dlatego nie trzeba było używać słowa kluczowego return.
Poniżej przykład użycia, wywołania metody goToPage().
public class NotebookStore {
public static void main(String[] args) {
Notebook blankNotebook = new Notebook();
// zamiast poniższego przypisania wartości ...
// blankNotebook.currentPage = 2;
// ... użyjemy, wywołamy metodę goToPage()
blankNotebook.goToPage(2);
}
}
Tak jak w przypadku dla pola w klasie należy użyć operatora kropki (.) za pomocą, którego odwołujemy się do metody. W ciele metody, pomiędzy nawiasami {}, zawarta jest logika aplikacji, algorytm, kod programu. W tym przypadku jest, to przypisanie wartości parametru metody int page do zmiennej w klasie int currentPage. Można by zapytać, a dlaczego tego nie zrobić w metodzie main()?
public class NotebookStore {
public static void main(String[] args) {
Notebook blankNotebook = new Notebook();
blankNotebook.currentPage = 2;
}
}
Oczywiście, że można, ale co w przypadku kiedy ktoś poda wartość dla bieżącej strony (int currentPage) większą niż liczba stron (int pages) w notatniku? Tutaj potrzebny jest algorytm, logika, która sprawdzi czy można wykonać taką operację.
Poniżej zmodyfikowana metoda o wspomniany warunek.
public class Notebook {
int pages;
int pagesWritten;
int currentPage;
void goToPage(int page) {
// 'if' - jeżeli strona 'int page', do której chcemy przejść
// jest większa od liczby stron w notatniku 'int pages' ...
if (page > pages) {
// ... wypisz komunikat 'Nie ma takiej strony'
System.out.println("Nie ma takiej strony");
// 'else' - w przeciwnym przypadku przejdź do podanej strony
// 'currentPage = page'
} else {
currentPage = page;
}
}
}
Powyższy kod można umieścić w metodzie main(), ale każda osoba korzystająca z klasy Notebook będzie musiała samemu napisać powyższy algorytm metody goToPage(), a to łamie zasadę DRY – Don’t Repeat Yourself.
Poniżej kod wywołujący, korzystający z metody goToPage().
public class NotebookStore {
public static void main(String[] args) {
Notebook blankNotebook = new Notebook();
blankNotebook.pages = 10;
System.out.println("Obecna strona notatnika: " + blankNotebook.currentPage);
blankNotebook.goToPage(6);
System.out.println("Po przejściu na wybraną stronę: " + blankNotebook.currentPage);
}
}

Przyszedł czas na zwrócenie wartości z metody. Poniżej klasa Notebook z dodaną nową metodą int write(String text); w ciele tej metody (pomiędzy klamerkami {}) jest użyte słowo kluczowe return, co oznacza, że metoda zwraca wartość, która musi być zgodna z zadeklarowanym typem zwracanym w tym przypadku int. Metoda goToPage() nie zwraca żadnej wartości, jej typ zwracany jest zdeklarowany jako void, co pozwala na pominięcie słowa kluczowego return w metodzie.
Działanie metody polega na zapisaniu w notatniku tekstu, który został przekazany do metody jako parametr String text. Następnie numer bieżącej strony jest zwiększany o jeden currentPage = currentPage + 1;. Metoda zwraca wartość zmiennej currentPage z użyciem słowa kluczowego return currentPage;
Poniżej klasa Notebook z dodaną metodą int write(String text).
public class Notebook {
int pages;
int pagesWritten;
int currentPage;
int write(String text) {
System.out.println("Zapisuję tekst na stronie: " + text);
currentPage = currentPage + 1;
return currentPage;
}
void goToPage(int page) {
if (page > pages) {
System.out.println("Nie ma takiej strony");
} else {
currentPage = page;
}
}
}
Skoro metoda zwróciła jakąś wartość, to należy tę wartość przypisać do zmiennej, bez tego tracimy, to co zostało obliczone, przetworzone przez algorytm, kod w metodzie. Aby przypisać wartość zwracaną z metody najpierw trzeba stworzyć zmienną, do której przypiszemy wynik zwracany z metody. W IntelliJ pomocny jest skrót CTRL + ALT + V, który wciskamy będąc w linijce, gdzie jest wywołana metoda. Skrót ten stworzy za nas zmienną i przypisze jej wartość zwracaną z wybranej metody.
System.out.println("Jesteś na stronie: " + blankNotebook.currentPage);
int currentPageAfterWrite = blankNotebook.write("Notatki Junior Java Developer'a.");
System.out.println("Po zrobieniu notatki jesteś na stronie: " + currentPageAfterWrite);
Powyżej fragment kodu pokazujący jak przypisać wartość zwracaną z metody.

Często wiele osób na początku ma problem z zapamiętaniem, gdzie i kiedy należy utworzyć zmienną, do której przypiszemy wartość zwracaną z metody. Zmienną tworzymy zawsze przed wywołaniem metody i/lub na początku linijki, w której wywoływana jest metoda. Pomocą, która pozwoli zapamiętać, gdzie tworzyć zmienną jest sama metoda i jej deklaracja. Np. metoda int write(String text) wartość zwracaną int ma na początku, przed nazwą samej metody i tak właśnie trzeba ustawić kursor, na początku linii, w której chcemy przypisać wartość zwracaną z metody. Deklarujemy zmienną, np. int currentPageAfterWrite i przypisujemy do niej wartość zwracaną z metody write.
Przepis na przypisanie wartości zwracanej z metody:
– szukamy informacji, podpowiedzi w deklaracji metody, np.: int write(String text),
– ustawiamy kursor na początku linii, w której wywołujemy metodę, np. blankNotebook.write(„Notatki Junior Java Developer’a”);,
– deklarujemy zmienną, np. int currentPageAfterWrite,
– przypisujemy wartość zwracaną z metody do zmiennej, np. int currentPageAfterWrite = blankNotebook.write(„Notatki Junior Java Developer’a.”);,
– albo korzystamy ze skrótu CTRL + ALT + V w IntelliJ.
Kod klasy NotebookStore, która korzysta z klasy Notebook.
public class NotebookStore {
public static void main(String[] args) {
Notebook blankNotebook = new Notebook();
blankNotebook.pages = 10;
System.out.println("Obecna strona notatnika: " + blankNotebook.currentPage);
blankNotebook.goToPage(6);
System.out.println("Po przejściu na wybraną stronę: " + blankNotebook.currentPage);
System.out.println("Jesteś na stronie: " + blankNotebook.currentPage);
int currentPageAfterWrite = blankNotebook.write("Notatki Junior Java Developer'a.");
System.out.println("Po zrobieniu notatki jesteś na stronie: " + currentPageAfterWrite);
}
}
Całość kodu można znaleźć na:
Zapraszam do regularnego odwiedzania mojej strony, będą pojawiać się kolejne artykuły oraz do kontaktu przez email kontakt(at)juniorjavadeveloper.pl.