1. 程式人生 > >main函式傳參以及陣列越界問題

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