2011-09-06 11 views
5

Podemos dar el parámetro args[] al método main() o elegir no hacerlo. Pero si llamamos a cualquier otro método parametrizado sin pasar suficientes argumentos, nos daría un error.¿Por qué no obtenemos un error cuando no pasamos ningún argumento de línea de comando?

¿Por qué no es el caso con el método main(String[] args)?

+0

¿Puede estar más claro, cómo está ejecutando la aplicación con y sin parámetros? – medopal

+3

Respuesta relacionada, puede hacer lo mismo como este 'public void myMethod (String ... array)' de esta manera puede pasar un número nulo de argumentos, incluso 0, y no dará error. – medopal

Respuesta

1

Porque Main es especial y toma automáticamente un String array vacío en leu de nada dado. Como eso describe con precisión llamando al main() sin argumentos. El sistema proporciona esto como una conveniencia.

+0

incorrecto 'null' no tiene nada que ver con eso. – aioobe

1

Java llama al método principal en sí con argumentos, por lo que no hay ningún error aunque "llamemos" sin argumentos.

4

Siempre se pasa una matriz de cadena, incluso si no hay parámetros de línea de comandos. En esa situación, la longitud de la matriz es 0, que se puede probar por sí mismo a través de

public static void main(String[] args) { 
    if (args.length == 0) { 
     System.out.println("no parameters were passed"); 
    } 
} 
10
public static void main(String[] args) 

main siempre recibe su parámetro, que es una matriz de String. Si no pasa ningún argumento de línea de comandos, args está vacío, pero aún está allí.

2

Como ve, principal exceptúa un argumento de función, que es una matriz de cadenas. JVM se encarga de pasar los argumentos de línea de comando como una matriz de cadenas a la función principal. Si no se dan argumentos, se pasa una matriz vacía, pero aún está allí.

Se podría así tener su propia función definida como esto:

void myMain(String args[]) { 
    for(int i = 0; i < args.length; i++) { 
     System.out.println(args[i]); 
    } 
} 

A continuación, puede llamar a esta función, emulando pasan tres argumentos de línea de comandos:

String a[] = {"foo", "bar", "bah"}; 
myMain(a); 

O puede emular situación donde no se dan argumentos de línea de comando:

String a[] = {}; 
myMain(a); 

También puede pasar args de lo real principal para su función y que funcionará sin importar si se dan o no los parámetros:

public static void main(String[] args) { 
    myMain(args); 
} 

Tenga en cuenta que no hay verificación de puntero nulo en myMain por lo que si se le pasa un null arrojará NPE.

Cuestiones relacionadas