Cuando se utiliza el comando java
para ejecutar una aplicación Java desde la línea de comandos, por ejemplo,
java some.AppName arg1 arg2 ...
los comando carga la clase que usted designado, y luego mira para el método de punto de entrada llamado main
. Más específicamente, se está buscando un método que se declara como sigue:
package some;
public class AppName {
...
public static void main(String[] args) {
// body of main method follows
...
}
}
Los requisitos específicos para el método de punto de entrada son:
- El método debe ser nominado en la clase.
- El nombre del método debe ser "principal" con exactamente esa capitalización .
- El método debe ser
public
.
- El método debe ser
static
.
- El tipo de devolución del método debe ser
void
.
- El método debe tener exactamente un argumento y el tipo de argumento debe ser
String[]
.
El argumento puede ser declarado usando la sintaxis varargs; p.ej. String... args
. Ver https://stackoverflow.com/a/36803396/139985. El argumento String[]
se usa para pasar los argumentos de la línea de comando, y es necesario incluso si su aplicación no toma argumentos de línea de comando.
Si cualquiera de los requisitos anteriores no se cumple, el comando java
fallará con el mensaje:
java.lang.NoSuchMethodError: main Exception in thread “main”
Si se produce este error, compruebe que dispone de un método main
y que satisface todos los 6 de los requisitos enumerados anteriormente.
1 - Una variación muy oscura de esto es cuando uno o más de los personajes de "principal" no es un latino de 1 carácter ... pero un carácter Unicode que se parece a la correspondiente AMÉRICA -1 carácter cuando se muestra.
2 - Consulte Why is the Java main method static? para obtener una explicación de por qué se requiere que el método sea estático.
3 - String
debe corresponder a java.lang.String
y no una clase personalizada denominada String
ocultarlo.
sólo una suposición que están llamando a una función que no existe, pero el compilador es para parar si usted fuera a hacer eso. – eternalmatt
Wikición completa. –
@eternalmatt: este es un caso que el compilador no puede resolver. Ver mi respuesta para más detalles. –