Выполнение команды var-arg

1

Когда я посылаю никакие аргументы командной строки для метода 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 но не существует исключения, не могли бы вы объяснить мне, почему не исключение?

  • 1
    Вы спрашиваете, почему вы не получаете исключение, если вы не передаете аргументы своему методу?
Теги:
command-line-arguments

4 ответа

1
Лучший ответ

Вы не получаете исключения, даже если вы не передаете аргументы командной строки, почему, поскольку JVM создаст пустой массив без элементов, даже аргументов командной строки нет.

В цикле for вы задали условие, чтобы цикл выполнялся, только если размер массива args больше 1.

Итак, первый раз ваш размер args равен zero поэтому цикл не будет выполнен, поэтому args[x] не будет выполняться, поэтому исключение не будет во время выполнения.

рассмотрите приведенные ниже изображения, чтобы получить представление о том, что происходит.

java Yippee ниже диаграмму

Изображение 174551

java Yippee 1 2 3 4 приведет к диаграмме ниже Изображение 174551

  • 1
    Отличное объяснение @ Mr.Jhash Venku. Большое спасибо, я никогда не видел такого объяснения раньше
4

Когда массив пуст, args.length равно 0, поэтому ваш цикл никогда не будет работать в первую очередь.

  • 0
    при первом запуске цикла он также проверяет условие ..?
  • 1
    Ах да, это так .... :) Спасибо SLaks ...
Показать ещё 1 комментарий
3

Индекс цикла должен начинаться с 0, а не 1. Когда вы начинаете в 1, вы пропускаете первый аргумент.

По крайней мере, ваше условие - x < args.length - правильно. Вот почему вы не получаете никаких исключений, когда не передаете никаких аргументов (так как цикл не вводится).

1

Нет ничего плохого в запуске индекса цикла при не отрицательном значении, когда условие действительно (например: я <args.length). Это связано с тем, что сначала выполняется условие цикла.

С другой стороны, если у нас есть int x = -1, вы бы получили x < args.length → -1 < 0 => инструкцию System.out.println(args[x] + " "); будет вызываться и делать System.out.println(args[-1] + " "); , что вызовет исключение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню