2011-09-06 11 views
5

Possiamo dare il parametro args[] al metodo main() o scegliere di non farlo. Ma se chiamassimo un qualsiasi altro metodo parametrizzato senza passare abbastanza argomenti, ci darebbe un errore.Perché non riceviamo un errore quando non passiamo alcun argomento della riga di comando?

Perché non è il caso del metodo main(String[] args)?

+0

Puoi essere più chiaro, come stai eseguendo l'applicazione con e senza parametri? – medopal

+3

Risposta correlata, puoi fare lo stesso in questo modo 'public public myMethod (String ... array)' in questo modo puoi passare nay numero di argomenti anche 0, e non darà errore. – medopal

risposta

1

Perché Main è speciale e prende automaticamente uno String array vuoto in leu di nessuna informazione. Come che descrive accuratamente chiamando main() senza argomenti. Il sistema fornisce questo come comodità.

+0

Sbagliato. 'null' non ha nulla a che fare con questo. – aioobe

1

Java chiama il metodo principale stesso con gli argomenti, quindi non ci sono errori su di esso anche se "chiamiamo" senza argomenti.

4

Viene sempre passato un array di String, anche se non sono presenti parametri della riga di comando. In tale situazione la lunghezza dell'array è 0, che è possibile testare per voi stessi tramite

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 riceve sempre il suo parametro, che è un array di String. Se non si passa alcun argomento della riga di comando, args è vuoto, ma è ancora lì.

2

Come si vede, principale eccezione un argomento di funzione - che è una matrice di stringhe. JVM si occupa di passare qualsiasi argomento della riga di comando come una matrice di stringhe alla funzione principale. Se non ci sono argomenti dati, viene passato un array vuoto - ma è ancora lì.

Si potrebbe anche avere la propria funzione definita come questo:

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

È quindi possibile chiamare questa funzione, emulando che passano tre argomenti della riga di comando:

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

Oppure si può emulare situazione dove non vengono forniti argomenti della riga di comando:

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

È anche possibile passare args dal reale principale per la funzione e funzionerà a prescindere se i parametri sono stati dati o no:

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

Nota che non c'è nulla di controllo puntatore nella myMain quindi se si passa un null si getterà NPE.

Problemi correlati