¿Por qué una clase Java no muestra ‘Ejecutar como’ -> ‘Aplicación Java’ en Eclipse IDE cuando los argumentos del método principal son ‘int [] args’ en lugar de ‘String [] args’?

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.

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.

1. Está perfectamente bien escribir una clase java, sin un punto de entrada. Por lo tanto, nunca está obligado a escribir public static void main (String [] args) y, por lo tanto, no hay error de compilación o tiempo de ejecución.

2. main no es una palabra clave, pero por diseño de lenguaje, es una norma aceptada considerar main como el punto de partida de una aplicación java.

3. Esto es solo una suposición. La variable de cadena puede contener cadenas, caracteres, enteros, flotantes, prácticamente cualquier cosa … ¿Pero viceversa? Imposible..

El uso de argumentos de cadena es un sistema operativo, no una convención de Java. O, para ser más precisos, una convención de comandos. El cmd shell en Windows y el bash shell y sus imitaciones en el sistema operativo de la familia Unix requieren que un programa tenga un punto de entrada al que se pase una cadena. Java ha elegido la convención de que el punto de entrada se llamará main (heredado de C) y dividirá la cadena única que pasa el sistema operativo en sus palabras componentes.

Entonces, la razón por la que no obtiene una opción de ejecución a menos que ajuste su programa a la plantilla requerida es que si no lo hace, el sistema operativo no sabrá cómo iniciar su programa. Esto no es Java, es Windows, Linux, MacOS, etc., exigiendo su conformidad con su estándar.