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.
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 args
puedes 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 nombradoargs
(puede nombrarlo como quiera), aunque es mejor seguir la convención. También podrías verString... 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 unString[]
para ti, llena de argumentos. Luego, esta matriz se pasa almain
método como argumento.– Emperador MC
10 de febrero de 2020 a las 22:18
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™.
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 correrjava 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
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:
-
public static void main(String[] argument)
-
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
}
}
Igoranze
Incluso aunque OP solo está hablando de la String[] args
quiero 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.
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
}