Sub aspect conceptual, metoda este o funcție sau o procedură, care
folosește drept date atât valorile argumentelor sale, cât și câmpurile
clasei căreia îi aparține metoda respectivă.
În principiu, deosebirea dintre funcție și procedură este că
funcția "întoarce" o valoare, în timp ce metoda nu întoarce o valoare,
ci are numai efect lateral. O funcție fără efect lateral
este realizarea în program a conceptului matematic de funcție
și este folosită în expresiile de calcul numai pentru valoarea
ei. În limbajele C/C++ și Java, procedurile se scriu, din punct de
vedere sintactic, la fel ca funcțiile, dar se consideră că ele intorc o
valoare specială numită void. Acesta este un artificiu pentru
a indica faptul că o asemenea "funcție" nu întoarce o valoare.
În limbajele de programare tradiționale, o funcție (sau procedura) folosește ca date argumentele sale și variabilele globale. În limbajul Java nu există variabile globale și nici funcții independente (care să nu fie metode ale unor clase). În schimb, fiecare metodă poate folosi ca date atât argumentele saleși variabilele locale, cât și câmpurile clasei căreia îi aparține metoda respectivă. |
Cea mai simplă formă sintactică a declarației de metodă este
următoarea:
tip_valoare_intoarsa nume_metoda(declaratii_de_argumente) {
corpul_metodei
}
în care:
tip_valoare_intoarsa - este tipul valorii primitive sau clasa
valorii-referință întoarsă de aceasta metodă;
nume_metoda- este un identificator care, în mod uzual, începe cu
literă mică și constituie numele metodei;
declaratii_de
argumente - este o listă de declarații de argument separate prin
virgulă, deci ea poate avea forma:
declaratie_argument1,
declaratie_argument2, ... declaratie_argumentN
dar poate fi și vidă. Lista declarațiilor de
argument este cuprinsă între paranteze rotunde. Fiecare declarație de
argument are forma
tip_argument
nume_argument
în care
tip_argument - este tipul sau clasa argumentului respectiv;
nume_argument- este un identificator care, în mod uzual, începe cu
literă mică.
După această listă de argumente se deschide
acolada unui bloc, care conține corpul metodei,
adică secvența de instrucțiuni prin care se calculează valoarea
funcției respective și/sau - dacă este cazul - se efectuează acțiunile
care constituie efectele laterale ale acesteia.
Exemplu
În fișierul Cercuri.java
se declară două clase pentru cercuri: clasa Cerc1, în care aria și
circumferința se calculeaza prin metode ale instanței, și clasa Cerc2,
care conține metode statice.
Clasa Cerc1 conține câmpul static final PI și câmpul de instanță r (raza cercului). Aceasta întrucat numărul PI este o constantă valabilă pentru orice cerc, în timp ce raza cercului diferă de la o instanță la alta. Cele doua metode de instanță, arie() și circumferinta(), nu au argumente, dar folosesc ca date câmpurile statice și de instanță declarate în clasa respectivă. Invocarea acestor metode se face calificându-le cu numele instanței. Clasa Cerc2 conține, de asemenea, câmpul static final PI, dar nu conține câmpul de instanță r. În schimb, metodele sale sunt statice și primesc raza cercului ca argument. Invocarea acestor metode se face calificându-le cu numele clasei. În fișierul Cercuri.java
există și clasa Cercuri, în care se folosesc clasele Cerc1 și Cerc2
declarate anterior. Iată această aplicație:
Remarcăm că: |
Signatura metodei constă din numele acesteia, însoțit de
lista de argumente. În consecință, două metode pot avea același nume,
dacă diferă între ele prin signatură. Putem da exemple din clasele
existente în pachetele deja studiate.
Să considerăm, de exemplu, următoarele metode ale clasei
String: int indexOf(int ch) int indexOf(int ch, int fromIndex) int indexOf(String str) int indexOf(String str, int fromIndex) Se observă imediat că prima și a doua diferă prin numărul argumentelor, prima și a treia diferă prin tipul unicului argument, iar a doua și a patra diferă prin tipul unuia din cele două argumente. |