2011-02-07 100 views
6
public static void main(String arg[]) 

在上面的語句,我可以使用int陣列代替String陣列的?如果我沒有在括號中加入任何內容,即如果使用空括號,會發生什麼情況?Java的基本問題

回答

2

我不確定你的意思是Int array但不,你不能。方法簽名需要完全匹配public static void main(String[] args)。唯一可以改變的是參數的名稱。方法的名稱,參數類型,可見性(public vs private等)是運行時用來查找方法本身的東西。如果它不符合該簽名,則它不是入口點方法,因此在您的應用程序啓動時不會調用它。

但是,應該指出,你所建議的將會毫無問題地進行編譯。直到您嘗試運行該應用程序纔會出現問題。

+0

通過INT數組,我的意思是一個整數數組。 – pradeep 2011-02-07 05:27:37

+0

@rajivpradeep,我想這就是你的意思,但不是,你不能。它必須是一個String []。當你想到這件事情是有道理的。參數數組將由shell提供,它不知道如何將字符串轉換爲整數。它所理解的是Strings。如果你想要一個int數組,你必須使用Integer.parseInt()來轉換String到Integer。 – 2011-02-07 05:29:53

1

編譯器會接受,但運行時會給你的NoSuchMethodError

5

當你編譯你提到的更改代碼,它將成功編譯。當您嘗試運行時,JVM將使用String數組作爲參數來檢查主方法。由於沒有使用String數組作爲參數的主要方法,因此您的代碼將無法成功執行,並且會拋出NoSuchMethodError。

2

該代碼將編譯但不運行。

字符串[]的原因是人們可以通過命令行傳遞參數。

0

主要方法是java應用程序的入口點。如果你看一下java language specification,它明確規定:

的方法主要必須聲明 公共,靜態和無效的。它必須接受一個參數 字符串數組。這種方法可以是 聲明爲

public static void main(String... args) 

字符串[]陣列中傳遞包含已經通過任何啓動的應用程序傳遞任何命令行參數。然後,您可以閱讀並根據需要轉換它們。

0

如果你希望得到的數字,而不是字符串,用這個辦法

public static void main(String[] args) { 

    int[] numbers = new int[args.length]; 
    for(int i = 0; i < args.length; i++) numbers[i] = Integer.parseInt(args[i]); 

} 

異常處理是讀者自己練習。

其他答案很好地解釋了你的'爲什麼'的其他問題。

3

不,我認爲你不能使用int數組而不是String數組。因爲操作系統使用參數int來傳遞一個整數值,指定用戶輸入的命令行參數的數量。所以你必須遵循以下模式。

public static void main(String[] args) 

public static void main(String args[]) 
0

不,它產生像 Main方法運行時錯誤類測試沒有發現,請定義的主要方法爲: 公共靜態無效的主要(字串[] args)

JAVA是更具體的關於主要方法簽名,它將您的方法視爲一個類中的一般方法。