I metodi
Consiste nel definire sotto un solo nome un blocco di istruzioni, utilizzabili in diverse parti del programma richiamandolo con il nome senza dover riscrivere ogni volta il codice.
L‘identificatore è il nome assegnato al blocco di codice e che dovrà essere utilizzato per eseguire il metodo. I parametri sono i nomi simbolici delle variabili che il blocco dovrà ricevere. Se specificato il metodo può restituire un valore o non restituire niente se il metodo è dichiarato come void.
Possiamo decidere di dichiarare delle eccezioni tramite la keyword throws per gestire le condizioni di errore ma questo lo riprenderemo in una sede opportuna.
L’identificatore e la lista dei parametri si definisce come signature del metodo, questo significa che possiamo ridefinire il medesimo metodo più volte a patto che ogni definizione abbia una lista di parametri diversa come tipo.
Bisogna definire il metodo di visibilità del metodo:
- public – visibile ovunque;
- private – solo alla classe;
- protected – solo dalle classi che stanno nel medesimo package di quelle in cui è definito il metodo e dalle classi da essa derivate;
- default – visibile alle classi nel medesimo package;
- final – serve per rendere un metodo non ridefinibile dalle sottoclassi;
Per gli argomenti abbiamo un meccanismo, varags, che ci permette di definire un numero di argomenti indefinito.
public Utente (int id, String… desc) { blocco codice }corrisponde a:public Utente (int id, String[] desc) { blocco codice } |
Il vantaggio di usare il meccanismo varargs è nel rendere il codice semplice e sintetico
usando vargargs Utente (1, “Descrizione Uno”, “Descrizione Due”, “Descrizione Tre”, “Descrizione Quattro”);senza vargargs Utente (1, new String[“Descrizione Uno”, “Descrizione Due”, “Descrizione Tre”, “Descrizione Quattro”]); |
Bisogna stare attenti a non creare ambiguità in fase di esecuzione
public void provaVarg (String arg1, String… list) { blocco codice } |
Il compilatore non genera nessun errore, ma solo in fase di esecuzione perché il sistema non riesce a valutare se il primo parametro fa parte o non della lista.
I metodi non statici sono associati ad ogni singola istanza di una classe, possono accedere e modificare le variabili dell’istanza e modificarne lo stato. Per eseguire il metodo usiamo nomeIstanza.nomeMetodo();
I metodi statici non sono associati ad una istanza ma solo ad una classe, non potranno interagire con le variabili di istanza. Per eseguire il metodo usiamo nomeClasse.nomeMetodo();