Java: Проверьте, являются ли аргументы командной строки нулевыми
Я ищу, чтобы сделать некоторые ошибки проверки для моих аргументов командной строки
public static void main(String[] args)
{
if(args[0] == null)
{
System.out.println("Proper Usage is: java program filename");
System.exit(0);
}
}
однако это возвращает исключение массива вне границ, что имеет смысл. Я просто ищу правильное использование.
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как точка входа из командной строки. Тем не менее, я видел некоторые программы, которые используют compiledC++код с 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); } }