2009-05-21 36 views

Respuesta

35

args contiene los argumentos de línea de comandos que se pasan al programa Java en una invocación. Por ejemplo, si I invocar el programa de este modo:

$ java MyProg -f file.txt 

Entonces args habrá una matriz que contiene las cuerdas "-f" y "file.txt".

232

En Java args contiene el command-line arguments proporcionado como una matriz de objetos String.

En otras palabras, si ejecuta su programa como java MyProgram one two entonces args contendrá ["one", "two"].

Si quería dar salida a los contenidos de args, sólo puede bucle a través de ellos como esto ...

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

A tener en cuenta es que 'args' no necesariamente tiene que ser llamado' args' (puede que el nombre lo que quieras) - aunque es mejor seguir convención. También puede ver 'String ... args' de vez en cuando, lo que es equivalente. – vikingsteve

+49

args indexing start at 0. (al contrario de C que le da el nombre del programa) – AdrieanKhisbe

+1

@Daniel, ¿'args' está garantizado por estar separado por espacio, independientemente del sistema operativo? – Pacerier

12

String [] args es también como se declara una matriz de cadenas en Java.

En esta firma de método, la matriz args se rellenará con valores cuando se llame al método (como se muestra en los otros ejemplos). Puesto que usted está aprendiendo sin embargo, vale la pena entender que esta args array es igual que si creó uno a sí mismo 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 
} 
6

Cuando una clase Java que se ejecuta desde la consola, el principal método es lo que se llama. Para que esto suceda, la definición de este método principal debe ser

public static void main(String []) 

El hecho de que esta matriz de cadenas se llama args es una convención estándar, pero no es estrictamente necesario. Se podría llenar esta matriz en la línea de comandos whne se invoca su programa

java MyClass a b c 

Comúnmente se utilizan para definir las opciones de su programa, para archivos de ejemplo para escribir o leer.

84

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

En otras palabras, si ejecuta

MiPrograma java uno dos

Entonces args contiene:

[ "uno", "dos"]

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

La razón para esto es configurar su aplicación para ejecutar un particu o proporcionarle la información que necesita.


Si usted es nuevo en Java, le recomiendo la lectura a través del oficial de Oracle JavaTM Tutorials.

5

en void Main (args String []) public static args es una matriz de argumento de línea de consola cuyo tipo de datos es de cadena. en esta matriz, puede almacenar varios argumentos de cadena mediante la invocación de ellos en la línea de comandos como se muestra a continuación: java MYPROGRAM Shaan Real continuación Shaan y Real serán almacenados en la matriz como arg [0] = "Shaan" ; arg [1] = "Royal"; puede hacerlo manualmente también dentro del programa, cuando no los llame en la línea de comando.

7

Cuando termine su código, lo convertirá en un archivo con la extensión .java, que se puede ejecutar haciendo doble clic en él, pero también a través de una consola (terminal en un mac, cmd.exe en Windows) que permite al usuario hacer muchas cosas. Una cosa es que pueden ver los mensajes de la consola (System.out.print o System.out.println) que no pueden ver si hacen doble clic. Otra cosa que pueden hacer es especificar los parámetros, por lo que normalmente se usaría la línea

java -jar MyCode.jar 

después de navegar a la carpeta del programa con

cd C:My/Code/Location 

en las ventanas o

cd My/Code/Location 

en Mac (tenga en cuenta que mac es menos complicado) para ejecutar código, pero para especificar los parámetros que usaría

java -jar MyCode.jar parameter1 parameter2 

Estos parámetros almacenados en la matriz args, que puede utilizar en su programa es que desea permitir que el usuario controle parámetros especiales, como qué archivo usar o cuánta memoria puede tener el programa. Si quieres saber cómo usar una matriz, probablemente puedas encontrar un tema en este sitio o simplemente buscarlo en Google. Tenga en cuenta que se puede usar cualquier cantidad de parámetros.

6

Creo que está bastante bien cubierto por las respuestas anteriores que String args[] es simplemente una matriz de argumentos de cadena que puede pasar a su aplicación cuando la ejecuta.Para finalizar, debo añadir que también es válido para definir el parámetro del método pasa al método main como un argumento variable (varargs) de tipo String:

public static void main (String... args)

En otras palabras, el método main debe aceptar cualquiera una matriz de cadenas (String args[]) o varargs (String... args) como argumento de método. Y tampoco hay magia con el nombre args. Es lo mismo que escribir arguments o incluso freddiefujiwara como se muestra en e.gs siguientes .: se prefiere

public static void main (String[] arguments)

public static void main (String[] freddiefujiwara)

3

El estilo dataType[] arrayRefVar. El estilo dataType arrayRefVar[] proviene del lenguaje C/C++ y fue adoptado en Java para acomodar a los programadores C/C++.

4

Explicación en lenguaje sencillo.

El método principal espera que proporcionemos algunos argumentos cuando direccionamos nuestra JVM al nombre de la clase. Eso significa, supongamos que su nombre de archivo es Try.java, ahora para ejecutar esto en el símbolo del sistema escriba "javac Try.java" para compilar seguido de "java Try" para ejecutar. Ahora suponga que en lugar de escribir simplemente "java Try" escribe "java Try 1". Aquí ha pasado un argumento "1". Esto será tomado por su método principal incluso si no lo usa en su código.

Si desea comprobar si su método principal ha tomado realmente el argumento "1" o no. Simplemente, dentro de su tipo principal método lo siguiente:

for(int i = 0; i < args.length; i++) { 
     System.out.println("Argument is: "+args[i]); 
    } 
6

Incluso aunque OP sólo se está hablando de la String[] args, quiero dar un ejemplo completo de la public static void main(String[] args).

Public: es un Access Modifier, que define quién puede acceder a este Método. Público significa que este Método será accesible para cualquier Clase (si otras Clases pueden acceder a esta Clase).

Static: es una palabra clave que identifica lo relacionado con la clase. Esto significa que el Método o variable dado no está relacionado con la instancia sino relacionado con la Clase. Se puede acceder sin crear la instancia de una clase.

Void: se utiliza para definir el Tipo de devolución del Método. Define lo que el método puede devolver. No válido 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 solamente.

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):

/* Get the application's main method */ 
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; 
... 

Se puede ver que la starting method en Java debe ser nombrado main y debe tener la firma específica public static void main(String[] args)

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

Offtopic: ha sido 7 años desde que OP hizo esta pregunta, supongo que OP puede responder su propia pregunta por ahora.

4

Me gustaría romper

public static void main(String args[]) 

en partes.

"public" significa que se puede llamar a main() desde cualquier lugar.

"estática" significa que main() no pertenece a un objeto específico

"vacío" significa que principal() no devuelve nada

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

"Cadena []" significa una matriz de Cadena.

"args" es el nombre de la Cadena [] (dentro del cuerpo de main()). "args" no es especial; podrías ponerle otro nombre y el programa funcionaría igual.

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

La siguiente respuesta se basa mi entendimiento & alguna prueba.

¿Qué es String [] args?

Respuesta->

String [] -> Como Sabemos que esto es una matriz de cadena sencilla.

args -> es el nombre de una matriz puede ser cualquier cosa (por ejemplo, una, ar, argumento, PARAM, parámetro) no hay problemas con el compilador & ejecutado & I probados.

P. ej
1) public void main (String [] argumento estática)

2) public void principal [] parámetro estático (String)

¿Cuándo utilizar estos argumentos?

Respuesta->

La función principal está diseñado con mucha inteligencia por los desarrolladores. El pensamiento real es muy profundo. Que se desarrolla básicamente bajo la consideración de C & C++ basado en el argumento de la línea de comandos pero hoy en día nadie lo usa más.

cosa 1- usuario puede introducir cualquier tipo de datos desde la línea de comandos puede ser número o cadena & necesario aceptar que el compilador, que tipo de datos que debemos tener que usar? ver lo 2

Thing 2- Cadena 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.

por ejemplo El programa siguiente se compila & ejecutados & Probé también.

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  

    } 
} 
Cuestiones relacionadas