public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
Nie ma tu nic skomplikowanego: metoda Java, której zadaniem jest wygenerowanie ciągu powitalnego z nazwą, którą jej przekazujemy. Jak na przykład - Hello world! My name is Bobby
Przyjrzyjmy się właściwie konstrukcji metody, przyglądając się każdemu słowu kluczowemu w deklaracji metody (od lewej do prawej). Naszym pierwszym słowem kluczowym jest public
, które oznacza modyfikator dostępu:
Modyfikatory dostępu
Wskazują dopuszczalny zakres widoczności dla członków klasy, czyli ograniczenie miejsc, w których dozwolone jest użycie zmiennej lub metody. W Javie używane są następujące modyfikatory dostępu:-
publiczny : publiczny. Metody lub pola z tym modyfikatorem są publiczne, widoczne dla innych klas (a raczej ich metod i pól) z bieżącego pakietu i z pakietów zewnętrznych. Jest to najszerszy znany poziom dostępu;
-
chronione : dostęp do metod lub zmiennych z tym modyfikatorem można uzyskać z dowolnego miejsca w bieżącej klasie lub pakiecie lub w klasach, które dziedziczą tę klasę, a także metody lub pola, nawet jeśli znajdują się w innych pakietach
protected String constructHelloSentence(String name) {...}
-
Domyślny modyfikator. Jeśli pole lub metoda klasy nie ma modyfikatora, stosowany jest modyfikator domyślny. W tym przypadku pola lub metody są widoczne dla wszystkich klas w bieżącym pakiecie (jak chronione , ale bez widoczności podczas dziedziczenia).
String constructHelloSentence(String name) {...}
-
private : przeciwieństwo modyfikatora public . Metoda lub zmienna z takim modyfikatorem jest dostępna tylko w klasie, w której jest zadeklarowana.
private String constructHelloSentence(String name) {...}
String
w sygnaturze metody (pierwszą linię metody opisującą jej właściwości).
Wartość zwracana
Wartość zwracana to dane (jakiś wynik wykonania metody), które pojawiają się na ich miejscu po wywołaniu. Każda metoda ma wartość zwracaną. Albo nie?Metody wartości zwracanej
Wartością tą może być dowolny typ danych: zmienna typu prostego lub typu referencyjnego. W tym przykładzie wskazujemy, że metoda musi zwrócić obiekt typuString
, który jak pamiętamy jest klasą opisującą string. Drugą kwestią jest tu słowo return
. Ma to bezpośredni związek z wartością zwracaną: wartość po niej zostanie odesłana z powrotem do miejsca, w którym metoda została wywołana, a sama metoda zostanie wówczas return
zamknięta. Słowo to zwykle pojawia się w ostatniej linii metody (z wyjątkiem metod o różnych gałęziach, takich jak if, else..
.). Jeśli napiszesz kod w następnej linii po return
:
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
wtedy dostaniemy przekleństwa od kompilatora, co nie jest zbyt dobre (kompilator nie będzie polecał bzdur). Należy także pamiętać, że typ danych po nim с
musi odpowiadać temu zadeklarowanemu w sygnaturze metody. return
Przeczytaj więcej o tutaj .
próżnia
Do czego służyvoid
w Javie? Nie wszystkie metody mają wartość zwracaną. Niektórzy albo nie mają nic, albo nie muszą niczego zwracać. Co wtedy zrobić? Następnie w sygnaturze metody piszemy void
. Jak wyglądałaby nasza metoda bez wartości zwracanej?
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
Zapewne zauważyłeś, że wraz ze zwracaną wartością return
zniknęło słowo So it is, ponieważ nasza metoda nie powinna niczego zwracać. Można go jednak tutaj umieścić, ale bez żadnego znaczenia, po prostu return
; w ostatniej linijce. Jest to ogólnie bezużyteczne, więc void
jest opcjonalne w metodach with. Można go jednak użyć z pożytkiem w void
metodach, takich jak gałęzie lub pętle, w których chcesz natychmiast zakończyć metodę. Następnie w deklaracji metody mieliśmy constructHelloSentence
.
Nazwy metod
constructHelloSentence
- nazwa metody, charakterystyczna cecha, dzięki której możemy rozróżnić tę lub inną metodę. I odpowiednio wywołaj tę lub inną metodę. Nazwy metod muszą zaczynać się od małej litery, ale także używać wielkości wielbłąda (CamelCase, camel case): tj. Każde kolejne słowo w nazwie sąsiaduje z poprzednim i jest pisane wielką literą. Nazwy metod powinny opisywać metodę (najlepszym komentarzem jest właściwe nazewnictwo). Aby to zrobić, użyj czasowników lub kombinacji z czasownikami: getCat
, delete
, createCar
i tak dalej. W ramach jednej klasy nazwy metod muszą być unikalne (nie licząc przeciążeń metod, o czym porozmawiamy nieco później). Przyjrzyjmy się bliżej metodzie, którą analizujemy i zobaczmy ( String name
)
Parametry metody
Metody mogą (ale nie muszą) mieć pewne dane, które przyjdą z zewnątrz, a mianowicie z miejsca, w którym metoda została wywołana. W naszym przypadku widzimy, że przybywa obiekt typuString
z nazwą name
i w przyszłości wykorzystamy tę zmienną w naszej metodzie. W metodzie można użyć nieograniczonej liczby parametrów, ale nie zaleca się stosowania więcej niż 7. Gdy nie znamy dokładnej liczby elementów, ale wszystkie te elementy są potrzebne do tego samego celu i będą tego samego typu (np. String
), stosuje się wielokropek:
public void constructHelloSentence(String...name) {
...
}
Odwołanie do każdego elementu będzie takie: name[0]
Czy przypomina Ci coś? Zgadza się, tablica! Nic się nie zmieni, jeśli napiszemy:
protected void constructHelloSentence(String[] name) {
...
}
Dostęp do elementów również będzie miał postać: name[1]
I jeszcze jedno. Argumenty metod mogą być ostateczne :
public String constructHelloSentence(final String name) {
...
}
Oznacza to, że odniesienie do nazwy jest powiązane z konkretnym obiektem String
i nie można go zastąpić. O pracy ze zmiennymi referencyjnymi i ich interakcji ze słowami zastrzeżonymi final
możesz przeczytać w materiale „ Referencyjne typy danych w Javie ”.
Metody wywoływania
Więc uporządkowaliśmy tworzenie metod, teraz porozmawiajmy o ich użyciu. Jak wywołać metodę w Javie? Każda metoda w Javie należy do klasy. Aby zrozumieć, jak działa wywoływanie metod w Javie, przeanalizujmy zajęcia:public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
Ponieważ nasza metoda nie jest statyczna (jest to osobny temat do dyskusji wykraczający poza zakres dzisiejszego artykułu), aby ją wywołać należy najpierw stworzyć obiekt, a następnie wywołać na nim metodę:
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
W argumentach naszej metody przekazaliśmy ciąg znaków (nazwę), który chcemy zobaczyć w ciągu wynikowym wyświetlanym na ekranie:
Hello world! My name is Den
Warto też pamiętać, że metody można wykorzystywać wielokrotnie tyle razy, ile potrzebujemy – nie ma żadnych ograniczeń.
Ten
Często możesz zobaczyć słowo kluczowe w codethis
, jak w seterach:
public void setValue(Long value) {
this.value = value;
}
I co to znaczy? this
w Javie jest to odniesienie do bieżącego obiektu tej klasy. Na przykład, jeśli utworzyliśmy obiekt:
StringConstructor stringConstructor = new StringConstructor();
wtedy this
wewnątrz obiektu stringConstructor
będzie link do tego samego obiektu. this
jest używany zarówno do odniesienia się do zmiennej obiektu (jak w powyższym seterze), jak i do wywołania jakiejś metody. Możemy trochę przepisać naszą klasę:
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
Poprzez this
wywołanie metody tego obiektu w celu pobrania wymaganego ciągu znaków. Ale nadal z reguły prawie nie jest to używane w przypadku metod, ponieważ nawet bez niego istnieje odniesienie do metody danego obiektu; stosuje się go głównie w przypadku zmiennej obiektu.
Przeciążanie metody
Powiedzmy, że potrzebowaliśmy metody, która wykonuje zasadniczo tę samą logikę, ale wHello world
! zamiast tego world
chcemy wstawić własne słowo (string). Ale mamy już metodę constructHelloSentence
. Czy zatem musimy wymyślać nową nazwę dla metody, która zasadniczo wykonuje tę samą funkcjonalność? Nieważne jak to jest: w tym momencie z pomocą przychodzi nam przeciążenie metod. Przeciążanie metod polega na wielokrotnym użyciu tej samej nazwy metody podczas deklarowania jej w klasie. Z punktu widzenia składni języka w jakiejś przestrzeni lokalnej nie mogą istnieć dwie identyczne nazwy. Ale możliwe jest również deklarowanie metod o tych samych nazwach, ale różnych argumentach. Innymi słowy, klasa zawiera przeciążenia, gdy istnieją dwie lub więcej metod o tych samych nazwach, ale różnych danych wejściowych:
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
Widzimy tutaj, że metody nie muszą zawierać tego samego modyfikatora dostępu (a także typu zwracanego). Jeżeli zostanie wywołana metoda przeciążona, to z kilku zadeklarowanych metod kompilator automatycznie określi wymaganą na podstawie parametrów podanych podczas wywołania.
GO TO FULL VERSION