main函数传参以及数组越界问题

程序执行时出现异常: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

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页