Когда я посылаю никакие аргументы командной строки для метода main()
программы Yippee's
выход есть: No output
и если я запускаю программу с аргументами командной строки
java Yippee 1 2 3 4
выход 2,3,4
.
Моя программа следующая:
public class Yippee
public static void main(String[] args) {
for (int x = 1; x < args.length; x++) {
System.out.println(args[x] + " ");
}
}
}
Командные строки java:
java Yippee
java Yippee 1 2 3 4
В моей первой попытке запустить программу я не передаю какие-либо аргументы командной строки, но все же я обращаюсь к аргументам командной строки args[x]
поэтому я ожидаю, что это исключение во время выполнения, указывающее ArrayIndexOutOfBound
но не существует исключения, не могли бы вы объяснить мне, почему не исключение?
Вы не получаете исключения, даже если вы не передаете аргументы командной строки, почему, поскольку JVM создаст пустой массив без элементов, даже аргументов командной строки нет.
В цикле for вы задали условие, чтобы цикл выполнялся, только если размер массива args
больше 1.
Итак, первый раз ваш размер args
равен zero
поэтому цикл не будет выполнен, поэтому args[x]
не будет выполняться, поэтому исключение не будет во время выполнения.
рассмотрите приведенные ниже изображения, чтобы получить представление о том, что происходит.
java Yippee
ниже диаграмму
java Yippee 1 2 3 4
приведет к диаграмме ниже
Когда массив пуст, args.length
равно 0
, поэтому ваш цикл никогда не будет работать в первую очередь.
Индекс цикла должен начинаться с 0
, а не 1
. Когда вы начинаете в 1
, вы пропускаете первый аргумент.
По крайней мере, ваше условие - x < args.length
- правильно. Вот почему вы не получаете никаких исключений, когда не передаете никаких аргументов (так как цикл не вводится).
Нет ничего плохого в запуске индекса цикла при не отрицательном значении, когда условие действительно (например: я <args.length). Это связано с тем, что сначала выполняется условие цикла.
С другой стороны, если у нас есть int x = -1
, вы бы получили x < args.length → -1 < 0 =>
инструкцию System.out.println(args[x] + " ");
будет вызываться и делать System.out.println(args[-1] + " ");
, что вызовет исключение.