当我没有向程序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
但是有也不例外,你能解释一下为什么没有例外吗?
答案 0 :(得分:4)
当数组为空时,args.length
为0
,因此您的循环将永远不会在第一位运行。
答案 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
会产生下图
java Yippee 1 2 3 4
将生成下图