2013-10-10 40 views
0
class CmndLineArguments { 

    public static void main(String[] args) { 
    int length = args.length; 
    if (length <= 0) { 
    System.out.println("You need to enter some arguments."); 
    } 
    for (int i = 0; i < length; i++) { 
    System.out.println(args[i]); 
    } 
    } 
    } 

command : java CmndLineArguments Mahendra zero one two three 
output: 
Mahendra 
zero 
one 
two 
three 

如何做此代碼的工作?我們使用一個String []參數,所以我們不應該傳遞像新的String [] {.....} ..這樣的參數。混亂可變參數和字符串數組

,然後這是什麼形式和字符串... S型的區別/優點...因爲 的可變參數是用來傳遞零個或多個參數 在字串[] args我們也可以運行沒有零用戶輸入(或默認情況下java是否補充一些參數?)

回答

1

主要方法是特殊的。它被JRE調用而不是通過命令行調用。 JRE整理參數並將它們作爲數組提供給主方法。這在var args之前,並且與它們沒有關係。

+0

ohkay如此自動autoboxing到字符串數組發生? – user2837260

+0

是的,如果你看看像c或pascal這樣的老式語言,你會發現它們的行爲方式是一樣的。這正是語言設計者選擇將程序參數發送給程序的方式。命令行解釋器通常不會理解'MyProgram(new String [] {...})' – BevynQ

+0

嗯...最後一件事..可以用零參數運行嗎? 因爲String []參數應該有至少一個參數,不應該嗎? – user2837260

0

此代碼如何工作?我們正在使用String []參數,所以我們不是 應該傳遞參數,如新的String [] {.....} ..?

JVM創建所有輸入的數組,並將傳遞到您的主要方法。這僅適用於主要方法,因爲它是啓動應用的點和這個方法是由JVM

叫,然後這是什麼形式和 串... S型之間的差異/優勢.. 。由於可變參數是用來傳遞零個或多個參數 在字串[] args我們也可以不帶零用戶 輸入運行(或根本java的默認柔順一些參數?

可變參數讓你如果你不使用可變參數,那麼你的代碼工作就是創建一個params數組並將其傳遞給我接受一組參數的方法。

0

主要方法是特殊的,String []表示法是經典方法,但我現在經常見到String ...表示法。事實上,我認爲它與可變參數更簡潔,因爲,你知道,在命令行中沒有固定的數字或參數。

我不知道JVM是否將參數轉換爲字符串數組或字符串可變參數,但結果是相同的。

0

所以我們不應該傳遞像新的String [] {.....} ..的參數?

不,你不能。在聲明該數組之後,從哪裏傳遞給main方法?沒有。

公共靜態無效的主要(字串[] args)

即你的程序的起點和那些ARGS從命令行配貨jvm

From official docs of main

陣列中的每個串被稱爲命令行參數。命令行參數允許用戶在不重新編譯的情況下影響應用程序的操作。例如,一個排序程序可能允許用戶指定該數據在該命令行參數降序排序:

而且args... args

公共靜態的區別空隙的someMethod(字串[] args)**

你逝去參數傳遞給這裏,調用者應該聲明一個陣列並在這裏傳遞數組對象。

公共靜態無效的someMethod(字符串參數... args)

在這裏,你不知道通過傳遞參數,並允許方法調用者傳遞多個String對象的數量。

這裏是關於Varargas

最終參數的類型後的三個時期的官方網站的文檔表明最後一個參數可以作爲陣列或者作爲參數的序列進行傳遞。可變參數只能在最後的參數位置使用。

+0

嗯..我知道這一切,這是這個具體問題,它違反了規則..程序運行時沒有傳遞新的String [] {....}到String []參數...但現在我知道了對於主要方法它將其轉換爲數組,所以.. – user2837260

+0

@ user2837260那麼,你不能那樣做。 –