Java: проверьте, не соответствуют ли аргументы командной строки

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

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

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

Ответ 1

Аргументы никогда не могут быть 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);
    }
}

Ответ 2

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

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

Ответ 3

Чтобы расширить этот момент:

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

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

Ответ 4

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

Ответ 5

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

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

    }