![]() ![]() |
|
Sintassi:
Esempio (dalla Classe java.lang.Math)
|
![]() ![]() |
|
Java consente di chiamare più metodi con
lo stesso nome (overloading, sovraccarico), purché
abbiano una diversa firma (signature).
La firma di un metodo
è la sequenza
(<nome>,
<tipo1>, ..., <tipon>).
|
![]() ![]() |
|
Nella classe
java.lang.Math
ci
sono diversi metodi
min
che restituiscono il minore tra due numeri:
|
![]() ![]() |
|
Quando l'interprete incontra una chiamata tipo
nome(exp1,
..., expn) esegue i seguenti passi:
nome(tipo1,...,tipon) <tipo> nome(tipo1 par1, ... , tipon parn){
|
![]() ![]() |
|
Il passaggio dei parametri è il
meccanismo che lega i parametri attuali di una specifica invocazione
di un metodo ai parametri formali della corrispondente dichiarazione.
In Java, se abbiamo la dichiarazione
e la chiamata nome(exp1, ..., expn) l'effetto del passaggio di parametri è equivalente
all'esecuzione del seguente blocco di istruzioni:
Quindi:
Questo è garantito dalla scelta del metodo sulla
base della firma; se non c'è un metodo con la firma richiesta dall'invocazione,
il compilatore segnalerà un errore (cannot resolve symbol...).
|
![]() ![]() |
|
Se un parametro attuale è di tipo elementare,
le modifiche sul corrispondente parametro formale non si ripercuotono all'esterno
del metodo: si tratta di passaggio di parametri per valore.
Vediamo perché:
|
![]() ![]() |
|
Se un parametro attuale è un riferimento
ad un oggetto, allora le modifiche sul corrispondente parametro formale
si ripercuotono all'esterno del metodo: si tratta di passaggio di parametri
per
riferimento
Vediamo perché:
|
![]() ![]() |
|
Visto che main è un metodo,
cosa sono i parametri formali nella sua dichiarazione?
Il metodo main
ha un solo parametro formale, args,
di tipo array di String.
args[0] = argomento1 |
![]() ![]() |
|
Esempio: un programma che stampa il numero di caratteri dell'argomento su cui viene invocato.
Invocando:
java Count pippo
Nota per i conoscitori del C: Si noti che a differenza dell'array argv della procedura main di un programma C, args[0] contiene il primo argomento, e non il nome del programma. Questo perché il nome del programma coincide con il nome della classe. Inoltre non esiste argc, perché è ricavabile come args.length. |
![]() ![]() |
|
Ricordiamo che il tipo
di un metodo è il tipo del dato restituito dal metodo,
oppure void.
Se il tipo è diverso da void, il
metodo
si chiama tipizzato e deve restituire
un valore del tipo indicato: conseguentemente per ogni possibile ramo
di esecuzione del corpo deve comparire un comando
return
seguito da un'espressione del tipo del metodo.
Se il tipo è void, il metodo si chiama non tipizzato e non restituisce niente. I metodi non tipizzati normalmente non contengono alcun comando return. Possono comunque contenere dei comandi return, purché non siano seguiti da espressioni. In tal caso l'esecuzione del metodo termina quando si incontra un return oppure quando si sono eseguite tutte le istruzioni. |
![]() ![]() |
|
![]() ![]() |
Il tipo di un metodo può essere una classe.
In questo caso non viene restituito un valore, ma il riferimento ad un
oggetto.
E' possibile che venga restituito null:
se una variabile di tipo riferimento vale nullsignifica
che non riferisce alcun oggetto.
|