Primero comprendamos cómo se invoca el método principal. java.exe, cuando se invoca, analiza la línea de comando, crea una nueva matriz de cadenas en la JVM para contener esos argumentos, analiza el nombre de la clase (ya sea explícitamente mencionado o mencionado en el archivo de manifiesto del jar) que se supone que contiene el método principal , utiliza llamadas y clases JNI dentro de rt.jar para encontrar el método main () en sí mismo, luego invoca el método main (), pasando la matriz de cadenas recién creada como parámetro.
1. público:
Este método es accesible desde cualquier lugar: desde clases que no están en el mismo paquete, desde clases que no están en jerarquía … básicamente desde cualquier lugar. A menos que el método se declare público, las clases de tiempo de ejecución de Java (dentro de rt.jar) no podrán invocar el método principal dando como resultado NoSuchMethodError: main en tiempo de ejecución
Nota: es perfectamente legal tener un método privado / protegido / predeterminado estático vacío principal (String [] args) en una clase, pero JVM no podrá invocarlo. En resumen, no se puede usar como punto de entrada para la ejecución del programa
- Cómo aumentar mi nivel de programación
- ¿Qué es una biblioteca de entrada / salida?
- ¿Cómo te sientes cuando crees que te has desempeñado increíblemente bien en una entrevista pero aún te rechazan?
- ¿Cómo se prepara para una entrevista de ServiceNow?
- ¿Cómo debo prepararme para la entrevista de Morgan Stanley en Java?
estática:
Si el método principal no fuera estático, JVM tendría que instanciar primero la clase principal antes de crear el método principal. Eso sería complicado porque JVM tendrá que cargar primero todas las clases dependientes y también la clase principal tendrá que tener un constructor público sin argumentos y tampoco puede ser abstracto: hay demasiadas lagunas y ambigüedades para que esto tenga sentido
nulo:
A diferencia de C / C ++, se supone que Java es neutral para la plataforma y, por lo tanto, no puede devolver un valor al sistema operativo y esperar coherencia en todos los sistemas operativos. Por lo tanto, tiene sentido tener el tipo de retorno como vacío
principal :
Este es solo un nombre de método. La razón por la que lo mantuvieron como “principal” en lugar de “foo” o “bar” o lo que sea es probablemente porque esa ha sido la convención en C / C ++