Java: controlla se gli argomenti della riga di comando sono nulli

Sto cercando di fare un controllo degli errori per i miei argomenti della riga di comando

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

Tuttavia, ciò restituisce un’eccezione di array fuori limite, il che ha senso. Sto solo cercando l’uso corretto.

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

In altre parole, ciò che devi fare è controllare la lunghezza dei tuoi argomenti.

 public static void main(String[] args) { // Check how many arguments were passed in if(args.length == 0) { System.out.println("Proper Usage is: java program filename"); System.exit(0); } } 

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

Tuttavia, se qualche altra parte dell’applicazione chiama un metodo main , è ipotizzabile che possa passare un argomento null o un array di argomenti null .

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

Per approfondire su questo punto:

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

Raccomando sempre di verificare if ((args == null) || (args.length == 0)) , o if ((args != null) && (args.length > 0)) seconda delle necessità.

Dovresti controllare per (args == null || args.length == 0) . Sebbene il controllo null non sia realmente necessario, è una buona pratica.

Se non si passa alcun argomento allora anche in quel caso gli argomenti vengono inizializzati ma senza alcun elemento / elemento. Prova il seguente, otterrai lo 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); } }
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); } }