In Java il metodo main() è il punto di inizio e di fine di ogni programma. Solo le istru­zio­ni che rientrano nel suo campo di validità sono con­si­de­ra­te anche per l’ese­cu­zio­ne. Per questo motivo, per scrivere il codice è quindi im­por­tan­te tenere conto della sintassi del metodo fin nei minimi dettagli. Se non è corretta, il programma non viene eseguito.

Cos’è il metodo main() in Java?

A pre­scin­de­re dal progetto che vorresti rea­liz­za­re con il lin­guag­gio di pro­gram­ma­zio­ne e da quale codice usi, sia esso esteso o meno, all’inizio di ogni ap­pli­ca­zio­ne in Java c’è sempre il metodo main(). In sua assenza il codice non può essere eseguito. Prima che il codice venga passato a main(), è ne­ces­sa­rio che la macchina virtuale Java (JVM) sia caricata in memoria e che il codice sia compilato. Una volta eseguite queste ope­ra­zio­ni, il codice passa al metodo main() per il controllo; se lo supera, viene eseguito cor­ret­ta­men­te. In linea di principio è anche possibile uti­liz­za­re più di uno di questi metodi, a patto di non inserire più di un metodo main per classe. Anche se unico, non è per forza ob­bli­ga­to­rio; si deve ricorrere a questo metodo solo nelle classi per le quali si vuole avviare l’ese­cu­zio­ne.

Web Hosting
Diventa il n°1 della rete con il provider di hosting n°1 in Europa
  • Di­spo­ni­bi­li­tà garantita al 99,99%
  • Dominio, SSL ed e-mail inclusi
  • As­si­sten­za 24/7 in lingua italiana

La sintassi del metodo main() in Java

La sintassi del metodo main() in Java è sempre uguale ed è co­sti­tui­ta da varie parti im­por­tan­ti. Il metodo si presenta nel modo seguente:

public static void main(String[] args)
java

Questi com­po­nen­ti svolgono le funzioni seguenti:

  • public: assicura che sia possibile accedere a una classe anche dall’esterno.
  • static: dichiara il metodo come statico. Può quindi esistere senza che in pre­ce­den­za sia stato costruito un oggetto di una de­ter­mi­na­ta classe.
  • void: fa in modo che il metodo main() in Java non debba re­sti­tui­re nessun valore.
  • main: questo è il nome con cui la macchina virtuale Java può iden­ti­fi­ca­re il metodo non appena esegue un programma.
  • String[] args: si tratta di una matrice in cui vengono inseriti e ricevuti gli argomenti della riga di comando.

I singoli com­po­nen­ti e la loro utilità

Per com­pren­de­re meglio come funziona il metodo main() in Java e perché tutti i com­po­nen­ti sono così im­por­tan­ti, nelle sezioni che seguono li ana­liz­zia­mo ancora uno per uno. In par­ti­co­la­re, ti mostriamo cosa succede quando manca un pezzo della firma. A questo scopo uti­liz­zia­mo un esempio di codice molto semplice, che generiamo con il comando Java System.out.println. Si presenta come segue:

public class main {
	public static void main(String[] args) {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

Eseguendo questo codice ottieni l’output seguente:

Qui si trova il tuo testo di esempio.
bash

public

public funge da Access Specifier (in italiano: “mo­di­fi­ca­to­re di accesso) e segnala alla macchina virtuale Java dove viene eseguito il relativo programma. Esistono altri mo­di­fi­ca­to­ri di accesso, come default, private o protected. Tuttavia, se vengono uti­liz­za­ti all’interno del metodo main() in Java, viene generato un messaggio di errore:

public class main {
	private static void main(String[] args) {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

L’output è il seguente:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

Questo messaggio di errore segnala che non esiste un accesso pubblico al metodo.

static

Poiché il metodo usato è statico, viene con­fer­ma­to con la parola chiave “static”. Può essere usato anche in­di­pen­den­te­men­te dalle eventuali istanze di classe create. Se rimuovi la di­chia­ra­zio­ne “static”, il codice si presenta come segue:

public class main {
	public void main(String[] args) {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

Anche in questo caso ricevi un messaggio di errore anziché l’output de­si­de­ra­to:

Error: Main method is not static in class test, please define the main method as:
public static void main(String[] args)
bash

void

“void” è una parola chiave che definisce che il metodo main() in Java non deve re­sti­tui­re valori. Siccome main() è il punto di inizio e di fine di un programma in Java, re­sti­tui­re un valore sarebbe inutile. Senza “void” il codice si pre­sen­te­reb­be quindi così:

public class main {
	public static main(String[] args) {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

Questo è il messaggio di errore che provoca l’inu­ti­liz­zo della parola chiave:

Error: Main method must return a value of type void in class Main, please define the main method as:
public static void main(String[] args)
bash

main

In ogni programma in Java la JVM cerca in­nan­zi­tut­to l’iden­ti­fi­ca­to­re “main”, che indica il punto in cui deve iniziare e finire l’ese­cu­zio­ne. Non appena il metodo main() in Java è concluso, anche l’output termina. Pertanto questa firma non deve mai essere mo­di­fi­ca­ta o integrata. Tuttavia, se compiamo questa ope­ra­zio­ne nel nostro esempio, ne risulta il codice seguente:

public class main {
	public static void mainSostitutivo(String[] args) {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

Non trovando l’iden­ti­fi­ca­to­re, JVM termina di­ret­ta­men­te il programma, generando solo il messaggio di errore seguente:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

String[] args

La matrice “String[] args” cor­ri­spon­de alla classe java.lang.String e contiene dati che salva come valori di stringa. Se questa in­di­ca­zio­ne non è presente, il codice cambia come segue:

public class main {
	public static void main() {
		System.out.println("Qui si trova il tuo testo di esempio.");
	}
}
bash

Senza l’argomento, il metodo Java main() non può essere eseguito e viene nuo­va­men­te vi­sua­liz­za­to il messaggio seguente:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

Notazione al­ter­na­ti­va

L’esempio di codice mostrato qui è stato scritto con la sintassi più comune. Può comunque essere mo­di­fi­ca­to fa­cil­men­te per essere reso più chiaro. È possibile inserire le parentesi quadre subito dopo “args”, come segue:

public static void main(String args[]) { }
java

Puoi anche inserire argomenti come “Varargs”, ovvero liste di argomenti variabili:

public static void main(String…args) { }
java
Consiglio

Nella nostra Digital Guide trovi molti altri articoli su Java. Ad esempio abbiamo con­fron­ta­to Java con Ja­va­Script e ti pre­sen­tia­mo gli operatori Java più im­por­tan­ti.

Vai al menu prin­ci­pa­le