2009-04-10 117 views
2

由於它可能是Java語言中使用最廣泛的方法之一,爲什麼它必須接受一個字符串數組,而且如果沒有它,它就無法工作了?例如,我可以一直住:爲什麼Java main()方法接受一個String args數組?

public static void main() {} 

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

是否有更高的目標,這不僅僅是能夠接受命令行參數,特別是因爲絕大多數Java程序是GUI驅動的,不需要通過命令行接收參數?

+0

也許你會忽略任何爭論,但是那些希望支持參數的人 - 通常來自命令行? 命令行等通常通過一個Steing數組傳遞參數。如果你不關心他們 - 忽略他們。在main和main都存在的情況下,添加對fir main()的支持只會增加模糊性。 – 2009-04-17 08:25:56

回答

9

即使是一個gui驅動的java應用程序也會以一些主要方法開始。 「更高的目的」從未接受命令行參數。

目的就是接受論據。期。每當你啓動任何程序而不僅僅是Java時,你總會需要一些語法來傳遞參數

+0

這回答了我的問題的一部分,但這些論據用於什麼? – 2009-04-10 11:30:29

2

對於需要完成什麼而言,「絕大多數」的程序確實沒有太大區別。仍然有很多命令行程序是由命令行參數驅動的。

+0

這隻意味着你*應該*當你需要時能夠接收參數。如果你不需要它們,你不必被迫*接收它們。這是語言設計師的選擇。 – 2009-04-10 11:41:43

+0

您的陳述是真實的。在這個特定的案例中,我與Java語言設計師(我是一名C#粉絲)。有一個沒有用的論證並沒有什麼壞處,但它促進了語言的一致性。無論如何,這是一個非常小的問題,無疑是郎設計師的一個選擇。關於 – 2009-04-10 11:59:47

4

「是否有更高的目的(..)」

是:傳統。

2

許多GUI程序提供了一些工具來接受命令行開關來控制它們在啓動時的行爲。

+0

要添加到您的語句中並沒有太多的意義,許多GUI程序接受「文件名」作爲參數。 (將MSWord文檔拖入可執行文件中)。 – 2009-04-10 11:30:57

1

還有很多java程序通過命令行接收參數。想想javac,螞蟻,maven等

12

我同意它可以更靈活。在C#中,例如,所有的這些都是可以接受的切入點:

static void Main() 
static void Main(string[] args) 
static int Main() 
static int Main(string[] args) 

返回int使用返回值作爲過程的退出代碼的版本。如果你不關心接收任何參數,你可以使用其中一個不採取任何的版本。程序啓動時給出的任何參數都會被忽略。

所以是的,它可能更靈活 - 但它從來沒有讓我覺得在Java中的一個重大問題。

2

我想這是因爲許多Java程序至少需要一些參數。像C(Java的語法靈感,如果沒有其他的),Java會考慮將這些參數作爲參數提供給main的最佳方法。

即使是一個GUI程序也會經常使用命令行參數。僅僅因爲它的啓動shell通常不會要求這些參數(默認情況下),並不意味着它們不受支持。

6

程序總是採取命令行參數。程序員要決定它們是否用於任何事情。

因此,在沒有字符串數組的情況下實現一個main將會導致更復雜的啓動邏輯以及潛在的混淆和錯誤行爲,因爲不會多寫一個單獨的參數聲明(在整個程序中!)

並且,考慮到Java的總體冗長度,我支持IDE中的樣板代碼通用模板,比如Eclipse,但我沒有看到真正的問題。

相關問題