Java: проверьте, являются ли аргументы командной строки пустыми - PullRequest
80 голосов
/ 06 октября 2010

Я пытаюсь выполнить проверку ошибок для аргументов командной строки

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

Однако это возвращает исключение массива за пределами границ, что имеет смысл.Я просто ищу правильное использование.

Ответы [ 5 ]

144 голосов
/ 06 октября 2010

Аргументы никогда не могут быть null. Их просто не будет.

Другими словами, вам нужно проверить длину ваших аргументов.

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);
    }
}
15 голосов
/ 06 октября 2010

@ jjnguy ответ правильный в большинстве случаев. Вы никогда не увидите строку null в массиве аргументов (или массив null), если main вызывается при запуске приложения, которое запускается из командной строки обычным способом.

Однако, если какая-то другая часть приложения вызывает метод main, вполне возможно, что он может передать аргумент null или null массив аргументов.

Однако (2), это явно очень необычный вариант использования, и , это вопиющее нарушение подразумеваемого контракта для main метода точки входа. Поэтому я не думаю, что вам стоит проверять null значения аргументов в main. В маловероятном случае, когда они происходят, для вызывающего кода приемлемо получить NullPointerException. В конце концов, это ошибка в вызывающей стороне, нарушающая контракт.

9 голосов
/ 11 января 2012

Чтобы расширить этот пункт:

Возможно, сама переменная args будет нулевой, но не при обычном выполнении. Нормальное выполнение будет использовать java.exe в качестве точки входа из командной строки. Однако я видел некоторые программы, которые используют скомпилированный код C++ с JNI для использования jvm.dll, полностью обходя java.exe. В этом случае можно передать NULL методу main, и в этом случае args будет нулевым.

Я рекомендую всегда проверять if ((args == null) || (args.length == 0)) или if ((args != null) && (args.length > 0)) в зависимости от ваших потребностей.

0 голосов
/ 28 октября 2010

Вы должны проверить на (args == null || args.length == 0).Хотя проверка null на самом деле не нужна, это хорошая практика.

0 голосов
/ 06 октября 2010

Если вы не передадите какой-либо аргумент, то даже в этом случае аргументы инициализируются, но без какого-либо элемента / элемента. Попробуйте следующее, вы получите тот же эффект :

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

    }

...