# Java/Metodi

| Java Linguaggio Java categoria · sviluppo · Come posso contribuire? → Vai su Wikiversity | Java: Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale Tipi di datoJava/Tipi di dato • EspressioniJava/Operatori • VariabiliJava/Variabili locali • IstruzioniJava/Istruzioni • Strutture di controlloJava/Strutture di controllo • PackageJava/Package Classi e oggettiJava/Classi e oggetti • OggettiJava/Oggetti • MetodiJava/Metodi • Metodi (cont.)Java/Metodi/2 • ArrayJava/Array Modificatori di accessoJava/Modificatori di accesso • EreditarietàJava/Ereditarietà Gestione delle eccezioniJava/Gestione delle eccezioni • GenericsJava/Generics Thread e parallelismoJava/Multithreading • Interblocco ricontrollatoJava/Interblocco ricontrollato Alcune differenze con il CJava/Concetti fondamentali • LessicoJava/Lessico • GrammaticaJava/Grammatica |
In questo capitolo verranno spiegati i metodi, ovvero i mattoncini di una struttura software.

## Metodi

Un 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.
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:
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

La sintassi per la implementazione (scrittura di codice) di un metodo è la seguente:
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

In 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:
L'array args contiene le opzioni che vengono passate al programma Java da riga di comando:
Notare che la macchina virtuale distingue tra le opzioni passate alla macchina virtuale e quelle passate al programma; in altre parole, in questo esempio,
solo le opzioni finali finiscono nell'array di stringhe.

### Analogia con il C

La convenzione adottata dal Java è in analogia con il linguaggio C++, nel quale la funzione di partenza è tipicamente definita come
La somiglianza si nota maggiormente se si scrive questo nella forma equivalente
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).