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