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


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

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

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

5 74

5 ответов:

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

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

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

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

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

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

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

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

Если вы не передаете никаких аргументов, то даже в этом случае 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);
        }

    }