2011-09-06 19 views
5

我們可以將參數args[]設爲main()方法或選擇不選。但是如果我們調用任何其他參數化方法而沒有傳遞足夠的參數,它會給我們一個錯誤。當我們不傳遞任何命令行參數時,爲什麼不出現錯誤?

爲什麼方法不是這種情況?

+0

你能更清楚,你是如何執行應用程序有和沒有參數? – medopal

+3

相關的答案,你可以像這樣'public void myMethod(String ... array)'這樣你可以傳遞n個參數的數量甚至0,它不會給出錯誤。 – medopal

回答

1

因爲Main是特殊的,並且在沒有任何東西給出的情況下自動獲取空的String array。正如那準確地描述沒有參數調用main()。該系統爲此提供了方便。

+0

錯了。 'null'與它無關。 – aioobe

1

Java使用參數調用主方法本身,所以即使我們沒有參數「調用」也沒有錯誤。

4

即使沒有命令行參數,總是會傳遞一個String數組。在這種情況下該陣列的長度爲0,這可以通過

public static void main(String[] args) { 
    if (args.length == 0) { 
     System.out.println("no parameters were passed"); 
    } 
} 
10
public static void main(String[] args) 

main總是接收其參數,這是String陣列測試自己。如果你沒有傳遞任何命令行參數,args是空的,但它仍然存在。

2

正如你所看到的,主除了一個函數參數 - 這是一個字符串數組。 JVM負責將任何命令行參數作爲字符串數組傳遞給主函數。如果沒有給出參數,則會傳遞一個空數組 - 但它仍然存在。

您可能也有自己的功能定義爲這樣:

void myMain(String args[]) { 
    for(int i = 0; i < args.length; i++) { 
     System.out.println(args[i]); 
    } 
} 

然後,您可以調用這個函數,模擬傳遞三個命令行參數:

String a[] = {"foo", "bar", "bah"}; 
myMain(a); 

或者你也可以效仿情況在沒有命令行參數給出:

String a[] = {}; 
myMain(a); 

您也可以通過args從現實主到你的函數,如果任何參數分別給予或不是會不顧工作:

public static void main(String[] args) { 
    myMain(args); 
} 

注意,有一個在myMain沒有空指針檢查,因此,如果你傳遞一個null它會拋出NPE。

相關問題