Java: Vérifiez si les arguments de la ligne de commande sont nuls

Je cherche à faire une vérification d’erreur pour mes arguments de ligne de commande

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

Cependant, cela retourne une exception de tableau hors limites, ce qui est logique. Je cherche juste le bon usage.

Les arguments ne peuvent jamais être null . Ils n’existent pas.

En d’autres termes, vous devez vérifier la longueur de vos arguments.

 public static void main(Ssortingng[] 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 réponse de @jjnguy est correcte dans la plupart des cas. Vous ne verrez jamais une chaîne null dans le tableau d’arguments (ou un tableau null ) si main est appelée en exécutant l’application est exécutée à partir de la ligne de commande de la manière normale.

Cependant, si une autre partie de l’application appelle une méthode main , il est concevable qu’elle puisse transmettre un argument null ou un tableau d’argument null .

Cependant, (2), il s’agit clairement d’un cas d’utilisation très inhabituel, et il s’agit d’une violation flagrante du contrat implicite relatif à une méthode d’entrée main . Par conséquent, je ne pense pas que vous devriez vous soucier de rechercher null valeurs d’argument null dans main . Dans le cas peu probable où ils se produiraient, il est acceptable que le code appelant reçoive une NullPointerException . Après tout, violer le contrat est un bogue dans l’appelant.

Pour développer ce point:

Il est possible que la variable args soit elle-même nulle, mais pas via une exécution normale. L’exécution normale utilisera java.exe comme point d’entrée depuis la ligne de commande. Cependant, j’ai vu certains programmes qui utilisent du code C++ compilé avec JNI pour utiliser le jvm.dll , en contournant complètement le fichier java.exe. Dans ce cas, il est possible de passer NULL à la méthode principale, auquel cas args sera nul.

Je recommande de toujours vérifier if ((args == null) || (args.length == 0)) , ou if ((args != null) && (args.length > 0)) fonction de vos besoins.

Vous devriez vérifier pour (args == null || args.length == 0) . Bien que la vérification de null ne soit pas vraiment nécessaire, c’est une bonne pratique.

Si vous ne passez aucun argument, même dans ce cas, args est initialisé, mais sans aucun élément / élément. Essayez le suivant, vous obtiendrez le même effet :

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