2010-10-06 13 views
65

Sto cercando di fare un po 'il controllo degli errori per i miei argomenti della riga di comandoJava: Verificare se gli argomenti della riga di comando sono nulli

public static void main(String[] args) 
{ 
    if(args[0] == null) 
    { 
     System.out.println("Proper Usage is: java program filename"); 
     System.exit(0); 
    } 
} 

Tuttavia, questo restituisce un array di eccezione limiti, che ha un senso. Sto solo cercando l'uso corretto.

risposta

117

Gli argomenti non possono mai essere null. Loro semplicemente non esistono.

In altre parole, è necessario verificare la lunghezza degli argomenti.

-8

Se non si passa alcun argomento, anche in questo caso args viene inizializzato ma senza alcun elemento/elemento. Provare la seguente, si otterrà il stesso effetto:


public static void main(String[] args) throws InterruptedException { 
     String [] dummy= new String [] {}; 
     if(dummy[0] == null) 
     { 
      System.out.println("Proper Usage is: java program filename"); 
      System.exit(0); 
     } 

    } 
 
+1

Questo è completamente errato. Se un'applicazione viene lanciata senza argomenti della riga di comando, il metodo 'main' verrà chiamato con una matrice' args' la cui lunghezza è zero. –

+0

@Stephen Una matrice senza elementi all'interno, ha lunghezza zero. Allora cosa c'è che non va nella mia risposta? –

+0

@Puspendu - ciò che è sbagliato è che 'dummy [0]' lancia un'eccezione di indice di array fuori dai limiti !! Idem se cambi il programma (indietro) per testare 'args [0]' ed eseguilo senza argomenti. –

12

@ risposta di jjnguy è corretta nella maggior parte dei casi. Non vedrete mai una stringa null nell'array degli argomenti (o una matrice null) se viene chiamato main eseguendo l'applicazione dalla riga di comando nel modo normale.

Tuttavia, se qualche altra parte l'applicazione chiama un metodo main, è concepibile che potrebbe passare un argomento null o null matrice di argomento.

Tuttavia (2), questo è chiaramente un molto insolito caso d'uso, e si tratta di una grave violazione del contratto implicito di un metodo main entry-point. Pertanto, non penso che dovresti preoccuparti di controllare i valori degli argomenti null in main. Nell'improbabile caso che si verifichino, è accettabile che il codice chiamante ottenga uno NullPointerException. Dopotutto, è un bug nel chiamante che viola il contratto.

0

Si consiglia di verificare per (args == null || args.length == 0). Sebbene il controllo null non sia realmente necessario, è una buona pratica.

6

Per espandere su questo punto:

È possibile che la variabile args stessa sarà nullo, ma non attraverso la normale esecuzione. L'esecuzione normale utilizzerà java.exe come punto di ingresso dalla riga di comando. Tuttavia, ho visto alcuni programmi che utilizzano il codice compilato C++ con JNI per utilizzare lo jvm.dll, ignorando completamente java.exe. In questo caso, è possibile passare NULL al metodo principale, nel qual caso gli argomenti saranno nulli.

Si consiglia di controllare sempre if ((args == null) || (args.length == 0)) o if ((args != null) && (args.length > 0)) in base alle proprie esigenze.

Problemi correlati