100 votes

Java: vérifie si les arguments de ligne de commande sont nuls

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

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

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

179voto

jjnguy Points 62123

Les arguments ne peuvent jamais être null . Ils n'existeront tout simplement pas.

En d'autres termes, ce que vous devez faire est de vérifier la longueur de vos arguments.

 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);
    }
}
 

21voto

Stephen C Points 255558

@jjnguy réponse est bonne dans la plupart des circonstances. Vous ne verrez jamais une null Chaîne de caractères dans le tableau des arguments (ou un null tableau) si main est appelé par l'exécution de l'application est exécutée à partir de la ligne de commande de façon normale.

Toutefois, si une autre partie de l'application appelle une main méthode, il est concevable qu'il pourrait passer un null d'un argument ou d' null tableau d'arguments. C'est clairement un très inhabituel de cas d'utilisation, et une violation flagrante du contrat implicite pour un main point d'entrée de la méthode. Par conséquent, je ne pense pas que tu devrais vérifier pour null valeurs. Dans le cas peu probable qu'elles ne se produisent, je dirais que c'est acceptable pour le code appelant pour obtenir un NullPointerException.

12voto

Sean Crouse Points 11

Pour développer ce point:

Il est possible que la variable args lui-même sera nulle, mais pas via l'exécution normale. L'exécution normale utilisera java.exe comme le point d'entrée à partir de la ligne de commande. Cependant, j'ai vu certains programmes qui utilisent compilé C++ code avec JNI utilisation de l' jvm.dll, en contournant l'java.exe entièrement. Dans ce cas, il est possible de passer NULL à la méthode main, auquel cas args sera null.

Je recommande de toujours vérifier if ((args == null) || (args.length == 0))ou if ((args != null) && (args.length > 0)) selon votre besoin.

1voto

fastcodejava Points 22174

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

-10voto

Si vous ne transmettez aucun argument, même dans ce cas, les arguments sont initialisés, mais sans aucun élément / élément. Essayez le suivant, vous obtiendrez le même effet :

 
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);
        }

    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X