2014-02-25 27 views
2

我最近在考試中被問到爲什麼我們只在java中使用主(String args[ ])?爲什麼我們不在其他編程語言中使用主(String args[ ])爲什麼我們只在Java中使用(String args [])?

+11

這是在C#以及,不是一個很好的考試問題:) – aw04

+2

奇怪的問題...而我想你的意思'字符串[] args'。無論如何,'String [] args'和'String args []'是相同的,儘管在Java中首選形式是首選。 – fge

+4

是的,「ars」是完全不同的東西。 –

回答

5

main()等形式進入應用程序入口點的方式是該語言的一部分。它在特定語言中以特定方式完成的原因是因爲該語言的作者已經看到了語言運行時系統(OS抽象層,如果該語言需要運行下面的操作系統)和程序員之間的協議。

我可以假設,在Java中它被做main(String[] args)因爲語言是由C++的方式啓發(因此main()被保留下來)和String[] args這是Java的方式來傳遞一個字符串數組到函數。

5

關於…

「爲什麼我們在其他編程語言中不使用main (String ars[])? 」

那’這個問題是一個有缺陷的假設。

C#example from MSDN

// Hello3.cs 
// arguments: A B C D 
using System; 

public class Hello3 
{ 
    public static void Main(string[] args) 
    { 
     Console.WriteLine("Hello, World!"); 
     Console.WriteLine("You entered the following {0} command line arguments:", 
     args.Length); 
     for (int i=0; i < args.Length; i++) 
     { 
     Console.WriteLine("{0}", args[i]); 
     } 
    } 
} 
0

爲什麼我們不使用任何其他編程語言的主要(字符串ARS [])?

因爲你喜歡這樣做可能。如果你問你是否可以在其他語言(如C++,與你標記的主題)做到這一點,答案是:是的,你可以

他們語法C++是:

int main(int argc, char *argv[]) 

或者 - 如果你想也包括環境變量:

int main(int argc, char *argv[], char *envp[]) 
+0

'envp'參數是一種通常支持的,但不是C++標準的一部分。 –

0

的Java有一個內置的String類這樣的參數給類的主方法由String args []或String數組表示。 而在C++中,沒有內建在String類中,因此參數由char * argv表示,而它們的計數由int argc表示。

0

調用應用程序的UNIX接口是將單個命令行標記收集到一個字符串數組中,並將該數組傳遞給應用程序的入口點。 UNIX定義該入口點被命名爲「main」,並且命令行標記將被表示爲指向C樣式空終止字符串的指針數組。由於沒有其他辦法知道數組的大小,數組大小傳遞作爲一個單獨的參數:

main(int argc, char* argv[]) 

MSDOS和Windows複製這個方案,所以它已經變得相當標準。

即使Java程序不是直接從操作系統調用,Java的設計者選擇使用類似的(熟悉的)範例,其中命令行標記將作爲數組傳遞給名爲「main」的方法的Java字符串對象。

+0

我不記得MS-DOS方案,但Windows使用單個進程*命令行*,每個應用程序都可以根據需要進行分析。請參閱GetCommandLine API函數。還有一個命令行解析功能,它執行標準解析。 –

+0

@ Cheersandhth.-Alf - 由於有層次,它有點混亂。這是一個真正的操作系統和執行映射的語言之間的「膠合」層,我想。 –

相關問題