【问题标题】:Running a var-arg command运行 var-arg 命令
【发布时间】:2014-08-10 22:53:03
【问题描述】:

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

【问题讨论】:

  • 您是在问为什么不向您的方法传递任何参数时没有得到异常?

标签: java command-line-arguments


【解决方案1】:

当数组为空时,args.length0,所以你的循环一开始就永远不会运行。

【讨论】:

  • 第一次运行循环时是否也会检查条件..?
【解决方案2】:

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

至少你的条件 - x &lt; args.length - 是正确的。这就是为什么在不传递任何参数时不会出现任何异常的原因(因为没有进入循环)。

【讨论】:

    【解决方案3】:

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

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

    所以第一次你的args 大小是zero 所以for循环不会被执行所以args[x]不会被执行这就是为什么在运行时没有异常。

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

    java Yippee 将得到下图

    java Yippee 1 2 3 4 将得到下图

    【讨论】:

    • 很好的解释@Mr.Jhash Venku。非常感谢我以前从未见过这样的解释
    【解决方案4】:

    当条件有效时(例如:i

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

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      相关资源
      最近更新 更多