Debido a que la máquina virtual Java por convención espera que el punto de entrada del programa tenga una firma de método de public static void main(String[] args)
.
Ese es el método que busca la JVM cuando le dice que ejecute una clase desde la consola. Un método con una firma de public static void main(int[] args)
no coincide y la clase lo trata como otro método invocable.
Utilizamos public static void porque public garantiza que el método sea visible fuera de la clase implementadora. Se declara nulo porque no se supone que el método devuelva nada. Por otra convención más antigua, los códigos de retorno se envían de vuelta al sistema operativo a través de códigos de salida y System.exit()
proporciona esta función en Java. Y se declara estático para garantizar que se pueda invocar el método sin tener una instancia de la clase para operar. Lo cual tiene mucho sentido ya que es un punto de entrada y es ejecutado por la JVM justo después de que la clase se carga en la memoria. Esta es la misma convención seguida de clases de utilidad como java.lang.Math
que no requieren una instancia para usar.
- ¿Debería molestarse en aparecer en entrevistas de software si no tiene el 'talento innato' para resolver problemas complejos?
- ¿Cuál es la mayor cantidad de lenguajes de codificación que alguien ha aprendido?
- ¿Cuáles son algunos casos de uso bueno y malo para modelos de concurrencia como subprocesos, actores y STM (Software Transactional Memory)? ¿Cuándo debo elegir uno sobre el otro?
- ¿Qué es lo más interesante en las pruebas de software?
- Estoy trabajando como probador manual durante 1,5 años en la puesta en marcha, ahora he sido ascendido a gerente de proyecto. ¿Es recomendable tomar la promoción?
El método principal puede crear instancias de la clase que lo contiene o instancias de otra clase. El método no requiere una instancia de su clase contenedor para funcionar.
En cuanto a por qué acepta cadenas en lugar de otro tipo de datos, comprenda la sintaxis de Java y gran parte de su comportamiento principal proviene del lenguaje C. El método principal está orientado a la consola y el lenguaje natural de la consola son los datos textuales. Por estas razones, esta es la razón por la que está diseñado para aceptar parámetros de cadena. Es seguro enviar cualquier texto como parámetro desde la consola a dicho método. ¿Sería seguro escribir algo como java -cp . MyClass 234a
java -cp . MyClass 234a
cuando el tipo aceptado para main es int[]
. Esto daría lugar a errores. Al aceptar cadenas, los valores se pueden pasar de forma segura y corresponde a la aplicación convertirlos al tipo apropiado con el manejo adecuado de errores.