Menu

Parametry metod w Javie: argumenty, przekazywanie przez wartość i return

Jak działają parametry metod w Javie: przekazywanie argumentów, różnica między parametrami a argumentami, zasada przekazywania przez wartość i zwracanie wartości.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Parametry pozwalają metodzie przyjmować dane

Metoda, która zawsze robi to samo, ma ograniczone możliwości. Parametry to dane wejściowe deklarowane w nawiasach metody, dzięki którym ta sama metoda może przy każdym wywołaniu działać na innych wartościach.

Każdy parametr zapisujesz z typem i nazwą. W ciele metody parametr zachowuje się jak zwykła lokalna zmienna, która już zawiera to, co przekazał wywołujący.

name to parametr. "Sam" i "Alex" to argumenty, czyli konkretne wartości podane w wywołaniu. Jedna definicja metody, dwa różne wyniki.

Parametry a argumenty

Tych dwóch słów często używa się zamiennie, ale warto je rozróżniać:

  • Parametr to miejsce na wartość w deklaracji: String name.
  • Argument to wartość, którą faktycznie przekazujesz: "Sam".

Czyli void greet(String name) deklaruje parametr, a greet("Sam") przekazuje argument. Gdy ktoś mówi "ta metoda przyjmuje dwa parametry", ma na myśli deklarację; "przekazuję dwa argumenty" dotyczy wywołania.

Kilka parametrów

Oddzielaj parametry przecinkami i każdemu nadaj własny typ. Nie da się współdzielić typu między dwoma parametrami tak jak w deklaracji zmiennych:

Argumenty są dopasowywane do parametrów wyłącznie według pozycji, nie według nazwy. describe("Sam", 30, true) działa, bo kolejność zgadza się z (String name, int age, boolean active). Zamień miejscami dwa argumenty zgodnych typów, a dostaniesz cichy błąd logiczny, nie błąd kompilacji. Kolejność ma więc znaczenie.

Częsty błąd to napisanie int add(int a, b). Każdy parametr potrzebuje własnego typu: int add(int a, int b).

Zwracanie wartości

Parametrami dane wpływają do metody; wartością zwracaną wynik wraca na zewnątrz. Zadeklaruj typ zwracany przed nazwą metody i użyj return, aby oddać wartość wywołującemu:

Typ zwracany (double) musi pasować do tego, co faktycznie zwracasz przez return. Metoda zadeklarowana jako void nic nie zwraca: może użyć samego return;, aby wcześniej zakończyć działanie, ale nie może zwrócić wartości. Gdy tylko wykona się return, metoda się kończy, a sterowanie wraca do miejsca wywołania.

Java przekazuje przez wartość

Na tym na początku potyka się prawie każdy. Gdy przekazujesz argument, Java kopiuje wartość do parametru. Dla typów prostych oznacza to, że metoda dostaje własną kopię, więc zmiana parametru nigdy nie dotyka zmiennej wywołującego:

x pozostaje 5. Metoda zmieniła własną kopię liczby, a nie oryginał.

Przekazywanie obiektów: nadal przez wartość, ale uważaj na referencję

Obiekty wyglądają na wyjątek, ale nim nie są. Kopiowana jest referencja (strzałka wskazująca na obiekt), a nie sam obiekt. Metoda wskazuje więc na ten sam obiekt i może go zmienić. Właśnie dlatego dodanie elementu do współdzielonej ArrayList wewnątrz metody jest widoczne dla wywołującego:

Dwa różne wyniki, jedna zasada. addItem idzie za referencją i zmienia faktyczną listę, więc wywołujący widzi pojawienie się new. replace przypisuje parametrowi zupełnie nową listę, ale to przestawia tylko lokalną kopię referencji, więc list wywołującego pozostaje nietknięta. Wniosek: przez parametr możesz zmienić obiekt, ale nigdy nie sprawisz, że zmienna wywołującego zacznie wskazywać na coś innego.

Dalej: przeciążanie metod

Wiesz już, jak przekazać metodzie dokładnie te dane, których potrzebuje. A co, jeśli chcesz, by jedna nazwa metody przyjmowała różne zestawy parametrów, np. print(int) i print(String)? To przeciążanie metod i o nim jest następna strona.

Najczęściej zadawane pytania

Czym różni się parametr od argumentu w Javie?

Parametr to zmienna nazwana w deklaracji metody, np. String name w void greet(String name). Argument to konkretna wartość, którą przekazujesz przy wywołaniu metody: greet("Sam") przekazuje argument "Sam". W skrócie: parametry są w definicji, argumenty w wywołaniu.

Czy Java przekazuje przez wartość, czy przez referencję?

Java zawsze przekazuje przez wartość. Dla typów prostych przekazywana jest kopia wartości, więc ponowne przypisanie parametru nie może zmienić zmiennej wywołującego. Dla obiektów przekazywana jest kopia referencji: możesz zmienić obiekt, na który wskazuje referencja (np. dodać element do listy), ale ponowne przypisanie samego parametru nie wpływa na zmienną wywołującego.

Jak przekazać kilka argumentów do metody w Javie?

Wypisz parametry w deklaracji po przecinku, każdy z własnym typem: int add(int a, int b). Wywołaj metodę z argumentami w tej samej kolejności: add(2, 3). Java dopasowuje argumenty do parametrów wyłącznie według pozycji, nie według nazwy, więc kolejność musi się zgadzać.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ