Metody w Javie

1. Wstęp

W Javie metody są tam, gdzie definiujemy logikę biznesową aplikacji. Definiują interakcje między danymi zawartymi w obiekcie.

W tym samouczku omówimy składnię metod Java, definicję podpisu metody oraz sposób wywoływania i przeciążania metod .

2. Składnia metody

Po pierwsze, metoda składa się z sześciu części:

  • Modyfikator dostępu: opcjonalnie możemy określić, z którego kodu można uzyskać dostęp do metody
  • Typ zwrotu: typ wartości zwracanej przez metodę, jeśli taka istnieje
  • Identyfikator metody: nazwa, którą nadajemy metodzie
  • Lista parametrów: opcjonalna lista oddzielonych przecinkami danych wejściowych dla metody
  • Lista wyjątków: opcjonalna lista wyjątków, które metoda może zgłosić
  • Treść: definicja logiki (może być pusta)

Zobaczmy przykład:

Przyjrzyjmy się bliżej każdej z tych sześciu części metody Java.

2.1. Modyfikator dostępu

Modyfikator dostępu pozwala nam określić, które obiekty mogą mieć dostęp do metody. Istnieją cztery możliwe modyfikatory dostępu: publiczny, chroniony, prywatny i domyślny (nazywany także prywatnym pakietem ).

Metoda może również zawierać słowo kluczowe static przed lub po modyfikatorze dostępu. Oznacza to, że metoda należy do klasy, a nie do instancji, dlatego możemy wywołać metodę bez tworzenia instancji klasy. Metody bez słowa kluczowego static są nazywane metodami instancji i mogą być wywoływane tylko w instancji klasy.

Jeśli chodzi o wydajność, metoda statyczna zostanie załadowana do pamięci tylko raz - podczas ładowania klasy - i dzięki temu będzie bardziej wydajna w pamięci.

2.2. Typ zwrotu

Metody mogą zwracać dane do kodu, z którego zostały wywołane. Metoda może zwracać wartość pierwotną lub odwołanie do obiektu albo nic nie zwraca, jeśli jako typ zwracany użyjemy słowa kluczowego void .

Zobaczmy przykład metody void :

public void printFullName(String firstName, String lastName) { System.out.println(firstName + " " + lastName); }

Jeśli zadeklarujemy zwracany typ, musimy określić instrukcję return w treści metody. Po wykonaniu instrukcji return wykonanie treści metody zostanie zakończone, a jeśli jest więcej instrukcji, nie zostaną one przetworzone.

Z drugiej strony metoda void nie zwraca żadnej wartości i dlatego nie ma instrukcji return .

2.3. Identyfikator metody

Identyfikator metody to nazwa, którą przypisujemy do specyfikacji metody. Dobrą praktyką jest używanie nazwy informacyjnej i opisowej. Warto wspomnieć, że identyfikator metody może mieć maksymalnie 65536 znaków (choć jest to długa nazwa).

2.4. Lista parametrów

Możemy określić wartości wejściowe metody w jej liście parametrów, która jest ujęta w nawiasy. Metoda może mieć od 0 do 255 parametrów rozdzielonych przecinkami. Parametrem może być obiekt, element pierwotny lub wyliczenie. Możemy używać adnotacji Java na poziomie parametrów metody (np. Adnotacja Spring @RequestParam ).

2.5. Lista wyjątków

Możemy określić, które wyjątki są generowane przez metodę, używając klauzuli throws . W przypadku sprawdzanego wyjątku albo musimy zawrzeć kod w klauzuli try-catch , albo musimy podać klauzulę throws w podpisie metody.

Przyjrzyjmy się więc bardziej złożonemu wariantowi naszej poprzedniej metody, który zgłasza sprawdzony wyjątek:

public void writeName(String name) throws IOException { PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt")); out.println("Name: " + name); out.close(); }

2.6. Treść metody

Ostatnią częścią metody Java jest treść metody, która zawiera logikę, którą chcemy wykonać. W treści metody możemy napisać tyle wierszy kodu, ile chcemy - lub w ogóle nie pisać w przypadku metod statycznych . Jeśli nasza metoda deklaruje zwracany typ, treść metody musi zawierać instrukcję return.

3. Podpis metody

Zgodnie z definicją sygnatura metody składa się tylko z dwóch elementów - nazwy metody i listy parametrów .

A więc napiszmy prostą metodę:

public String getName(String firstName, String lastName) { return firstName + " " + middleName + " " + lastName; }

Sygnaturą tej metody jest getName (String firstName, String lastName) .

Identyfikatorem metody może być dowolny identyfikator. Jeśli jednak przestrzegamy powszechnych konwencji kodowania w Javie, identyfikator metody powinien być czasownikiem zapisanym małymi literami, po którym mogą następować przymiotniki i / lub rzeczowniki.

4. Wywołanie metody

Teraz przyjrzyjmy się, jak wywołać metodę w Javie . Zgodnie z poprzednim przykładem załóżmy, że te metody są zawarte w klasie Java o nazwie PersonName :

public class PersonName { public String getName(String firstName, String lastName) { return firstName + " " + middleName + " " + lastName; } }

Ponieważ nasza metoda getName jest metodą instancji, a nie metodą statyczną , aby wywołać metodę getName , musimy utworzyć instancję klasy PersonName :

PersonName personName = new PersonName(); String fullName = personName.getName("Alan", "Turing");

Jak widać, używamy utworzonego obiektu do wywołania metody getName .

Finally, let's take a look at how to call a static method. In the case of a static method, we don't need a class instance to make the call. Instead, we invoke the method with its name prefixed by the class name.

Let's demonstrate using a variant of the previous example:

public class PersonName { public static String getName(String firstName, String lastName) { return firstName + " " + middleName + " " + lastName; } }

In this case, the method call is:

String fullName = PersonName.getName("Alan", "Turing");

5. Method Overloading

Java allows us to have two or more methods with the same identifier but different parameter list — different method signatures. In this case, we say that the method is overloaded. Let's go with an example:

public String getName(String firstName, String lastName) { return getName(firstName, "", lastName); } public String getName(String firstName, String middleName, String lastName) { if (!middleName.isEqualsTo("")) { return firstName + " " + lastName; } return firstName + " " + middleName + " " + lastName; }

Method overloading is useful for cases like the one in the example, where we can have a method implementing a simplified version of the same functionality.

Wreszcie, dobrym nawykiem projektowym jest upewnienie się, że przeciążone metody zachowują się w podobny sposób. W przeciwnym razie kod będzie mylący, jeśli metoda o tym samym identyfikatorze zachowuje się w inny sposób.

6. Wniosek

W tym samouczku zbadaliśmy części składni języka Java związane z określaniem metody w języku Java.

W szczególności przeszliśmy przez modyfikator dostępu, typ zwracany, identyfikator metody, listę parametrów, listę wyjątków i treść metody. Następnie zobaczyliśmy definicję podpisu metody, jak wywołać metodę i jak przeciążać metodę.

Jak zwykle kod widoczny tutaj jest dostępny na GitHub.