¿Qué es el “Argumentos de cadena[]”parámetro en el método principal?

7 minutos de lectura

avatar de usuario de freddiefujiwara
freddiefujiwara

Estoy empezando a escribir programas en Java. ¿Qué significa el siguiente código Java?

public static void main(String[] args)
  • Qué es String[] args?

  • ¿Cuándo usarías estos? args?

El código fuente y/o los ejemplos son preferibles a las explicaciones abstractas.

Avatar de usuario de Dan Lew
dan lew

en Java args contiene lo suministrado argumentos de la línea de comandos como una matriz de String objetos.

En otras palabras, si ejecuta su programa en su terminal como:

C:/ java MyProgram one two

entonces args contendrá ["one", "two"].

Si desea generar el contenido de argspuedes recorrerlos así…

public class ArgumentExample {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

El programa imprimirá en la terminal:

C:/ java MyProgram one two
one
two
    
C:/

  • Digno de mención es que args no necesariamente tiene que ser nombrado args (puede nombrarlo como quiera), aunque es mejor seguir la convención. También podrías ver String... args de vez en cuando, lo que es equivalente.

    – vikingsteve

    20 de junio de 2013 a las 6:40

  • la indexación de args comienza en 0. (al contrario de C que le da el nombre del programa)

    – AdrianKhisbe

    21 de marzo de 2014 a las 10:48

  • @Daniel, es args garantizado para estar separados por espacio independientemente del sistema operativo?

    – Pacerier

    17 de junio de 2014 a las 21:08


  • @Luke Eso no puede ser cierto, al menos no en los sistemas Unix. Allí, el shell pasa argumentos al programa ya divididos de acuerdo con las reglas del shell (con las comillas/escapes eliminados en consecuencia). No hay forma de que el programa (el intérprete de Java en este caso) acceda a la línea de comando original no dividida, ni debería desear hacerlo porque confundiría al usuario.

    – regnarg

    12 de noviembre de 2016 a las 14:17


  • Si algún futuro usuario se pregunta cómo los argumentos son recibidos por el main método: en primer lugar, las reglas del shell pasan los argumentos a la JVM. La mayoría de las conchas se dividen por espacios. Entonces la JVM inicializa un String[] para ti, llena de argumentos. Luego, esta matriz se pasa al main método como argumento.

    – Emperador MC

    10 de febrero de 2020 a las 22:18

Avatar de usuario de mR_fr0g
mR_fr0g

Esos son para argumentos de línea de comandos en Java.

En otras palabras, si corres

java MiPrograma uno dos

Entonces args contiene:

[ “one”, “two” ]

public static void main(String [] args) {
    String one = args[0]; //=="one"
    String two = args[1]; //=="two"
}

El motivo de esto es configurar su aplicación para que se ejecute de una manera particular o proporcionarle alguna información que necesite.


Si es nuevo en Java, le recomiendo leer los documentos oficiales de Oracle. Tutoriales de Java™.

avatar de usuario de mipadi
mipadi

args contiene los argumentos de la línea de comandos pasados ​​al programa Java al ser invocado. Por ejemplo, si invoco el programa así:

$ java MyProg -f file.txt

Entonces args será una matriz que contiene las cadenas "-f" y "file.txt".

  • Tuve que compilar mi código primero con javac MyProg.java y que correr java MyProg -f file.txt. ¿Hay alguna razón para esto, porque en ninguna parte de las respuestas se menciona?

    – stanimirsp

    17 de junio de 2020 a las 20:24

  • @stanimirsp: Tienes que compilar el código fuente de Java en un .class archivo primero.

    – mipadi

    18 de junio de 2020 a las 18:15

  • @stanimirsp Puede consultar stackoverflow.com/questions/5283841/…. Aunque eso no es para Java, la compilación en Java comparte la mayoría de las ventajas.

    – Filelandia

    12 de septiembre de 2020 a las 23:29

Avatar de usuario de Ajinkya
Ajinkya

La siguiente respuesta se basa en mi comprensión y algunas pruebas.

Qué es String[] args ?

Respuesta:

String[] -> Como sabemos, esta es una matriz de cadenas simple.

args -> es el nombre de una matriz, puede ser cualquier cosa (p. ej., a, ar, argumento, parámetro, parámetro) sin problemas con el compilador y ejecutado y también probé.

P.ej:

  1. public static void main(String[] argument)

  2. public static void main(String[] parameter)

¿Cuándo usarías estos argumentos?

Respuesta->

El main La función está diseñada de manera muy inteligente por los desarrolladores. El pensamiento real es muy profundo. Que se desarrolla básicamente bajo la consideración de C y C ++ basado en el argumento de la línea de comandos, pero hoy en día nadie lo usa más.

1- El usuario puede ingresar cualquier tipo de datos desde la línea de comando, puede ser Número o Cadena y es necesario para que el compilador los acepte. ¿Qué tipo de datos deberíamos usar? ver la cosa 2

2- String es el tipo de datos que admite todos los tipos de datos primitivos como int, long, float, double, byte, shot, char en Java. Puede analizarlo fácilmente en cualquier tipo de datos primitivo.

P.ej: El siguiente programa se compila y ejecuta y también lo probé.

Si la entrada es -> 1 1

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] parameter)
  {    
System.out.println(parameter[0] + parameter[1]); // Output is 11

//Comment out below code in case of String
    System.out.println(Integer.parseInt(parameter[0]) + Integer.parseInt(parameter[1])); //Output is 2
    System.out.println(Float.parseFloat(parameter[0]) + Float.parseFloat(parameter[1])); //Output is 2.0    
    System.out.println(Long.parseLong(parameter[0]) + Long.parseLong(parameter[1])); //Output is 2    
    System.out.println(Double.parseDouble(parameter[0]) + Double.parseDouble(parameter[1])); //Output is 2.0    

  }
}

Avatar de usuario de Igoranze
Igoranze

Incluso aunque OP solo está hablando de la String[] argsquiero dar un ejemplo completo de la public static void main(String[] args).

Public : es un Modificador de acceso, que define quién puede acceder a este Método. Público significa que cualquier clase podrá acceder a este método (si otras clases pueden acceder a esta clase).

Static : es una palabra clave que identifica la cosa relacionada con la clase. Esto significa que el método o la variable dados no están relacionados con la instancia sino con la clase. Se puede acceder sin crear la instancia de una Clase.

Void : se utiliza para definir el tipo de retorno del método. Define lo que el método puede devolver. Void significa que el método no devolverá ningún valor.

main: es el nombre del Método. JVM busca este nombre de método como punto de partida para una aplicación con una firma particular únicamente.

String[] args : es el parámetro del método principal.

Si observa el código fuente de JDK (jdk-src\j2se\src\share\bin\java.c):

/* Obtener el método principal de la aplicación */ mainID = (*env)->GetStaticMethodID(env, mainClass, "main", "([Ljava/lang/String;)V");
...
{    /* Make sure the main method is public */
...
mods = (*env)->CallIntMethod(env, obj, mid);
if ((mods & 1) == 0) { /* if (!Modifier.isPublic(mods)) ... */
    message = "Main method not public.";
    messageDest = JNI_TRUE;
    goto leave;
...

You can see that the starting method in java must be named main and must have the specific signature public static void main(String[] argumentos)

El código también nos dice que el public static void main(String[] args) no está arreglado, si cambia el código en (jdk-src\j2se\src\share\bin\java.c) a otra firma, funcionará, pero cambiar esto le dará otros posibles problemas debido a java especificaciones

Fuera de contexto: Han pasado 7 años desde que OP hizo esta pregunta, supongo que OP ya puede responder su propia pregunta.

yo rompería

public static void main(String args[])

en partes.

“público” significa que se puede llamar a main() desde cualquier lugar.

“estático” significa que main() no pertenece a un objeto específico

“vacío” significa que main() no devuelve ningún valor

“principal” es el nombre de una función. main() es especial porque es el inicio del programa.

“Cadena[]” significa una matriz de String.

“argumentos” es el nombre de la cadena[] (dentro del cuerpo de main()). “args” no es especial; podrías nombrarlo de cualquier otra forma y el programa funcionaría igual.

  • String[] args es una colección de cadenas, separadas por un espacio, que se pueden escribir en el programa en la terminal. La mayoría de las veces, el principiante no va a usar esta variable, pero siempre está ahí por si acaso.

Avatar de usuario de Cuga
Cuga

String [] args también es cómo declara una matriz de cadenas en Java.

En la firma de este método, la matriz args se llenará con valores cuando se llame al método (como muestran los otros ejemplos aquí). Sin embargo, ya que estás aprendiendo, vale la pena entender que esto args array es como si usted mismo creara uno en un método, como en este:

public void foo() {
    String [] args = new String[2];
    args[0] = "hello";
    args[1] = "every";

    System.out.println("Output: " + args[0] + args[1]);

    // etc... the usage of 'args' here and in the main method is identical
}

¿Ha sido útil esta solución?