El Java main() method o método main en Java es el punto de inicio y fin de todo programa en Java. Durante la ejecución solo se tienen en cuenta las se­n­te­n­cias que están dentro de su ámbito. Por eso es tan im­po­r­ta­n­te que la sintaxis del método se respete hasta el más mínimo detalle al crear el código. Si es in­co­rre­c­ta, el programa no se ejecutará.

¿Qué es el método main() en Java?

In­de­pe­n­die­n­te­me­n­te del proyecto que quieras realizar con este lenguaje de pro­gra­ma­ción y del código conciso o extenso que utilices para ello, en Java, toda apli­ca­ción comienza con el método main. Si este no está di­s­po­ni­ble, el código no puede eje­cu­tar­se. Antes de pasar a main(), primero se carga la máquina virtual Java (JVM) en la memoria y se compila el código. Una vez co­m­ple­ta­dos estos pasos, el código se pasa al método main() de Java para su co­m­pro­ba­ción y debería eje­cu­tar­se co­rre­c­ta­me­n­te. En principio, también es posible utilizar varios de estos métodos, aunque el máximo es un método main por clase.

La sintaxis del método main() en Java

La sintaxis del método main en Java es siempre la misma y consta de varias partes im­po­r­ta­n­tes. Este es su aspecto:

public static void main(String[] args)
java

Estos co­m­po­ne­n­tes cumplen las si­guie­n­tes funciones:

  • public: garantiza que también se puede acceder a una clase desde fuera.
  • static: declara el método como estático. Esto significa que puede existir sin que se haya creado pre­via­me­n­te un objeto de una clase es­pe­cí­fi­ca.
  • void: asegura que el método main no tiene que devolver un valor.
  • main: es el nombre con el que la máquina virtual Java puede ide­n­ti­fi­car el método en cuanto ejecuta un programa.
  • String[] args: es un array en el que se almacenan y reciben los ar­gu­me­n­tos de la línea de comandos.

Los distintos co­m­po­ne­n­tes y sus ventajas

Para entender mejor cómo funciona el método main en Java y por qué todos sus co­m­po­ne­n­tes son tan im­po­r­ta­n­tes, vo­l­ve­re­mos a re­pa­sar­los in­di­vi­dua­l­me­n­te en las secciones que aparecen a co­n­ti­nua­ción. En pa­r­ti­cu­lar, mo­s­tra­re­mos qué ocurre si falta parte de la firma. Para ello, ele­gi­re­mos un ejemplo de código muy sencillo, que mo­s­tra­re­mos con el comando Java System.out.println. Se vería así:

public class main {
	public static void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Si ejecutas este código, obtendrás el siguiente resultado:

Texto de ejemplo.
bash

public

public actúa como es­pe­ci­fi­ca­dor de acceso y señala a la máquina virtual Java dónde se ejecuta el programa co­rre­s­po­n­die­n­te. Existen otros mo­di­fi­ca­do­res de acceso como default, private o protected. Sin embargo, si los utilizas dentro del método main, recibirás un mensaje de error:

public class main {
	private static void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

El resultado co­rre­s­po­n­die­n­te es:

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

Este mensaje de error indica que no hay acceso público al método.

static

El hecho de que el método utilizado sea estático queda co­n­fi­r­ma­do por la palabra clave “static”. Por lo tanto, también se puede utilizar in­de­pe­n­die­n­te­me­n­te de cualquier instancia de clase creada. Si se elimina la de­cla­ra­ción como “static”, el código queda así:

public class main {
	public void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

En este caso, también recibirás un mensaje de error en lugar del resultado deseado:

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

void

“Void” es una palabra que es­pe­ci­fi­ca que el método main no debe devolver ningún valor. Como main() es el punto de inicio y fin de un programa en Java, no sería necesario devolver ningún valor. Este es el aspecto que tendría el código sin “void”:

public class main {
	public static main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Este es el mensaje de error que provoca la omisión de la palabra clave:

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

Para cada programa en Java, la JVM busca primero el llamado ide­n­ti­fi­ca­dor “main”. Este indica dónde debe comenzar y terminar la ejecución. En cuanto finaliza el método main, también finaliza la salida. Por lo tanto, esta firma no debe mo­di­fi­car­se ni añadirse nunca. Si hacemos esto en nuestro ejemplo, el código queda así:

public class main {
	public static void ersatzMain(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Como la JVM no puede encontrar el ide­n­ti­fi­ca­dor, terminará el programa di­re­c­ta­me­n­te y solo emitirá el siguiente mensaje de error:

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

El array String[] args co­rre­s­po­n­de a la clase java.lang.String y contiene datos que almacena como valores de cadena. Si omites esta es­pe­ci­fi­ca­ción, el código cambia:

public class main {
	public static void main() {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Sin el argumento, el Java main method no puede eje­cu­tar­se y volverás a recibir el siguiente mensaje de error:

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

Or­to­gra­fías al­te­r­na­ti­vas

El ejemplo de código que se muestra aquí se ha escrito siguiendo la sintaxis más habitual. Sin embargo, puedes adaptarlo fá­ci­l­me­n­te si quieres una mejor visión general. Por ejemplo, es posible colocar los corchetes di­re­c­ta­me­n­te después de “args”. Quedaría así:

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

También puedes almacenar ar­gu­me­n­tos como “varargs”, es decir, listas de ar­gu­me­n­tos variables:

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

En nuestra Digital Guide en­co­n­tra­rás otros muchos artículos sobre Java. Por ejemplo, hemos hecho una co­m­pa­ra­ción de Java y Ja­va­S­cri­pt y reunido los ope­ra­do­res Java más im­po­r­ta­n­tes.

Ir al menú principal