Java/Metodi
In questo capitolo verranno spiegati i metodi, ovvero i mattoncini di una struttura software.
Metodi
modificaUn metodo è un blocco di istruzioni che una classe o un oggetto rendono disponibili ad altre classi e/o oggetti, affinché possa essere eseguito su richiesta.
public class Prova {
public static void main(String[] args) {
scrivi();
}
void scrivi() {
System.out.println("prova");
}
}
In questo esempio, la JVM invoca il metodo main(), e questo metodo invoca il metodo scrivi(), il quale scrive una determinata stringa sulla console.
L'intestazione di un metodo è definita da
- eventuali modificatori
- tipo di ritorno
- nome del metodo
- lista di argomenti
- eventuale clausola throws
I metodi sono utili perché permettono di definire dei "pacchetti" di istruzioni che vengono eseguiti da un certo oggetto su richiesta:
public class Cane {
public void abbaia() { System.out.println("Bau bau"); }
public void dormi() { System.out.println("zzz"); }
}
public class Prova {
public static void main(String[] args) {
final Cane c = new Cane();
c.dormi();
c.abbaia();
c.dormi();
// ... ecc.
}
}
I metodi offrono numerosi vantaggi:
- servono a fare una stessa serie di operazioni in più punti del programma senza riscriverle, quindi snelliscono il programma;
- sono utili per suddividere un programma complesso in piccole parti, migliorandone la gestione e la leggibilità.
Come definire un metodo
modificaPer approfondire, vedi Modificatori di accesso. |
La sintassi per la implementazione (scrittura di codice) di un metodo è la seguente:
modificatori tipo nomedelmetodo (parametri eventuali){
corpo del metodo;
}
I parametri possono esserci oppure no.
I metodi possono restituire un valore particolare al chiamante oppure no. Quando si vuole restituire un valore il chiamante diverrà tale valore. La restituzione di un valore si ha con l'enunciato "return" ed il tipo del valore restituito indicato prima del nome del metodo. Se non si vuole restituire un valore o un dato particolare allora non occorre return e prima del nome del metodo c'è bisogno dell'enunciato "void". Quindi, prima del nome del metodo, ci deve essere o il "void" o il tipo del valore (con all'interno del corpo la clausola "return").
Il metodo main()
modificaIn Java, così come negli altri linguaggi di programmazione, l'esecuzione del programma comincia sempre da un punto convenzionalmente stabilito. In Java, si tratta del metodo main().
Esso è un normale metodo Java, esattamente al pari degli altri. La differenza rispetto agli altri è che, da qualche parte, è stato deciso per convenzione che un programma Java comincia quando la macchina virtuale invoca un metodo che si chiama main, se soddisfa determinati requisiti: deve essere obbligatoriamente definito come public e static (ma si noti che la classe
a cui appartiene non deve necessariamente essere public). Esso deve accettare un solo argomento, di tipo String[],
e avere void
come tipo di ritorno:
public static void main(String[] args) {}
L'array args contiene le opzioni che vengono passate al programma Java da riga di comando:
java nomepackage.nomeclasse opzione1 opzione2 ...
Notare che la macchina virtuale distingue tra le opzioni passate alla macchina virtuale e quelle passate al programma; in altre parole, in questo esempio,
java -cp . -jar NomeProgramma.jar opzione1 opzione2 ...
solo le opzioni finali finiscono nell'array di stringhe.
Analogia con il C
modificaLa convenzione adottata dal Java è in analogia con il linguaggio C++, nel quale la funzione di partenza è tipicamente definita come
int main(int argc, char** argv) {}
La somiglianza si nota maggiormente se si scrive questo nella forma equivalente
int main(int argc, char* argv[]) {}
In particolare:
- in C, il main() non appartiene ad alcuna classe e, quindi, non può essere invocato su un oggetto. In Java, la cosa più vicina ad una funzione è un metodo statico (che non può essere invocato su un oggetto specifico).
- se in C un char* rappresenta una stringa, un char*[] è un array di stringhe; in Java gli array portano sempre con sé l'indicazione della loro lunghezza, per cui il valore argc può essere ottenuto semplicemente scrivendo args.length;
- il valore int di ritorno corrisponde al valore passato al metodo System.exit() (0 nel caso in cui il programma termini con la semplice terminazione di tutti i thread non-daemon).
Precondizioni e postcondizioni: cosa sono e a cosa servono
modificaQuesta sezione è ancora vuota; aiutaci a scriverla! |