运行var-arg命令

时间:2014-08-10 13:42:30

标签: java command-line-arguments

当我没有向程序Yippee's main()方法发送命令行参数时,输出为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但是有也不例外,你能解释一下为什么没有例外吗?

4 个答案:

答案 0 :(得分:4)

当数组为空时,args.length0,因此您的循环将永远不会在第一位运行。

答案 1 :(得分:3)

您的循环索引应从0开始,而不是1。当你从1开始时,你跳过了第一个参数。

至少你的条件 - x < args.length - 是正确的。这就是为什么在没有传递参数时没有得到任何异常的原因(因为没有输入循环)。

答案 2 :(得分:1)

当条件有效时(例如:i&lt; args.length),在非负值处开始循环索引没有任何问题。这是因为首先评估循环条件。

另一方面,如果我们有int x = -1,您将x < args.length -> -1 < 0 =>将调用指令System.out.println(args[x] + " ");并执行System.out.println(args[-1] + " ");,这将引发异常。

答案 3 :(得分:1)

即使您没有传递命令行参数,也不会出现异常,为什么因为即使没有命令行参数,JVM也会创建一个没有元素的空数组。

在for循环中,您已经给出了条件,只有当args数组大小大于1时才会执行循环。

因此,首次args尺寸为zero时,因为循环不会被执行,所以args[x]不会被执行,这就是为什么有运行时也不例外。

考虑下面的图片,以便了解正在发生的事情。

java Yippee会产生下图

enter image description here

java Yippee 1 2 3 4将生成下图 enter image description here