JavaRush /Blog Java /Random-PL /Metody w Javie
articles
Poziom 15

Metody w Javie

Opublikowano w grupie Random-PL
Metody w Javie - 1W Javie aplikacja składa się z klas. Klasy z kolei składają się ze zmiennych. Odpowiadają za przechowywanie danych i metod, które odpowiadają za zachowanie klasy, czyli innymi słowy za logikę, którą może zapewnić (na przykład przetwarzanie niektórych danych, wywoływanie innych metod itp.). O takich składnikach jak zmienne możemy mówić długo, ale nie po to się dzisiaj zebraliśmy. Lepiej porozmawiajmy o takim komponencie klasy jako metodzie. Metody w Javie - 2Metoda to nazwany blok kodu zadeklarowany w klasie. Zawiera pewną kompletną sekwencję działań (instrukcji) mających na celu rozwiązanie osobnego problemu, którą można ponownie wykorzystać. Innymi słowy, metoda jest funkcją: czymś, co może zrobić twoja klasa. Inne języki również mają funkcje. Tylko w Javie są one członkami klas i zgodnie z terminologią OOP nazywane są metodami. Ale zanim będziemy kontynuować, spójrzmy na mały przykład:
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. Metody w Javie - 3W 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) {...}
Następnie mamy Stringw 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 typu String, 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 returnzamknię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. returnPrzeczytaj więcej o tutaj .

próżnia

Do czego służy voidw 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ą returnzniknęł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 voidjest opcjonalne w metodach with. Można go jednak użyć z pożytkiem w voidmetodach, 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ę. Metody w Javie - 4Nazwy 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, createCari 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 typu Stringz nazwą namei 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 Stringi nie można go zastąpić. O pracy ze zmiennymi referencyjnymi i ich interakcji ze słowami zastrzeżonymi finalmoż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? Metody w Javie - 5Każ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 code this, jak w seterach:
public void setValue(Long value) {
   this.value = value;
}
I co to znaczy? thisw Javie jest to odniesienie do bieżącego obiektu tej klasy. Na przykład, jeśli utworzyliśmy obiekt:
StringConstructor stringConstructor = new StringConstructor();
wtedy thiswewnątrz obiektu stringConstructorbędzie link do tego samego obiektu. thisjest 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 thiswywoł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 w Hello world! zamiast tego worldchcemy 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. Metody w Javie - 7Przeciąż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.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION