程序执行时出现异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
起初呢,我只是想简单测试一下main函数参数传递的问题。。。
代码如下:
public class Demo {
public static void main(String[] args) {
if(args != null) {
for(int i = 0; i < args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
} else {
System.out.println("hello world !");
}
}
}
这段代码主要是用来测试main函数传参的问题,当然,现在这段代码编译和运行没有任何问题,只是没有打到原本的目的。这段代码的目的其实就是想在main函数有参数的时候将传给main函数的参数输出到控制台,没有的话就输出:hello world !
有参数的执行结果如下:
然而没有参数的执行如下:
为啥呢???
没传递参数的时候args竟然不是null?直接看:
public class Demo {
public static void main(String[] args) {
System.out.println(args);
}
}
结果:[Ljava.lang.String;@50cbc42f
它真的不是null;
不能这样判断了。。。于是稍作修改:
public class Demo {
public static void main(String[] args) {
if(args[0] != null) {
for(int i = 0; i < args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
} else {
System.out.println("hello world !");
}
}
}
来吧,试一下:
哎呦,可以的。再试一下 。。。
我去,这里JVM抛出异常:数组越界。
赶紧思考一下,怎么就越界了呢?
回想一下数组越界的条件:假如定义一个数组int[] array = int[3];那么我们只能访问到2的索引处,因为只有123三个元素。可现在我只访问了0元素,而数组的地址值有不是null;为什么不让访问了呢?
其实仔细想想,这和你定义了一个数组但是没有给数组赋值是一样的。
public class Demo {
public static void main(String[] args) {
int[] a = {};
int length = a.length;
System.out.println(length);
System.out.println(a[0]);
}
}
结果:
数组根本就没有元素,你访问元素,这不是瞎扯吗?
于是乎继续:
public class Demo{
public static void main(String[] args) {
args = new String[3];
if(args[0] != null) {
for(int i = 0; i < args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
} else {
System.out.println("hello world !");
}
}
}
这回行了吧
是的,这样可以输出hello world !了。。。但是我们的目的照样不能实现。。。
我们给args数组开辟了三个元素的空间,这样初始化的时候会默认赋值null;可以用来判断了,总算不会越界。
但是要想从main函数传参来判断是不是null显然是不可能了。。。
换一种方式吧:
public class Demo {
public static void main(String[] args) {
if(args.length != 0) {
for(int i = 0; i < args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
} else {
System.out.println("hello world !");
}
}
}
这样总算实现了。0.0