public static void main(String arg[])
在上面的語句,我可以使用int
陣列代替String
陣列的?如果我沒有在括號中加入任何內容,即如果使用空括號,會發生什麼情況?Java的基本問題
public static void main(String arg[])
在上面的語句,我可以使用int
陣列代替String
陣列的?如果我沒有在括號中加入任何內容,即如果使用空括號,會發生什麼情況?Java的基本問題
我不確定你的意思是Int array
但不,你不能。方法簽名需要完全匹配public static void main(String[] args)
。唯一可以改變的是參數的名稱。方法的名稱,參數類型,可見性(public vs private等)是運行時用來查找方法本身的東西。如果它不符合該簽名,則它不是入口點方法,因此在您的應用程序啓動時不會調用它。
但是,應該指出,你所建議的將會毫無問題地進行編譯。直到您嘗試運行該應用程序纔會出現問題。
編譯器會接受,但運行時會給你的NoSuchMethodError
當你編譯你提到的更改代碼,它將成功編譯。當您嘗試運行時,JVM將使用String數組作爲參數來檢查主方法。由於沒有使用String數組作爲參數的主要方法,因此您的代碼將無法成功執行,並且會拋出NoSuchMethodError。
該代碼將編譯但不運行。
字符串[]的原因是人們可以通過命令行傳遞參數。
主要方法是java應用程序的入口點。如果你看一下java language specification,它明確規定:
的方法主要必須聲明 公共,靜態和無效的。它必須接受一個參數 字符串數組。這種方法可以是 聲明爲
或
public static void main(String... args)
字符串[]陣列中傳遞包含已經通過任何啓動的應用程序傳遞任何命令行參數。然後,您可以閱讀並根據需要轉換它們。
如果你希望得到的數字,而不是字符串,用這個辦法
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]);
}
異常處理是讀者自己練習。
其他答案很好地解釋了你的'爲什麼'的其他問題。
不,我認爲你不能使用int數組而不是String數組。因爲操作系統使用參數int
來傳遞一個整數值,指定用戶輸入的命令行參數的數量。所以你必須遵循以下模式。
public static void main(String[] args)
public static void main(String args[])
不,它產生像 Main方法運行時錯誤類測試沒有發現,請定義的主要方法爲: 公共靜態無效的主要(字串[] args)
JAVA是更具體的關於主要方法簽名,它將您的方法視爲一個類中的一般方法。
通過INT數組,我的意思是一個整數數組。 – pradeep 2011-02-07 05:27:37
@rajivpradeep,我想這就是你的意思,但不是,你不能。它必須是一個String []。當你想到這件事情是有道理的。參數數組將由shell提供,它不知道如何將字符串轉換爲整數。它所理解的是Strings。如果你想要一個int數組,你必須使用Integer.parseInt()來轉換String到Integer。 – 2011-02-07 05:29:53