2011-11-11 48 views
2

讓我們看看C,C++和Java中main()的方法簽名,而不用太在意它。Java要求main()方法是靜態的。但是C和C++不需要這樣的。爲什麼?

C和C++採用main()函數的語法,如下所示。

int main(void) 
{ 
    //Elegant code goes here. 

    return(0); 
} 

或者它可以簡單地聲明爲void,如下所示。

void main(void) 
{ 

    //Elegant code goes here. 

} 

如果需要,C和C++中的main()函數可以選擇帶兩個命令行參數。


然而,Java中main()方法的簽名就像這樣。

public static void main(String []args) 
{ 

    //Elegant Java code goes here. 
} 

Java要求的main()方法簡單,因爲它清楚地提到的是被調用時被創建的,因此沒有對象,它必須是靜態的第一種方法是靜態的。同樣的事情也適用於C和C++。 main()函數也是第一個被調用的函數,但它們並不要求main()函數是靜態的。爲什麼?爲什麼Java設計人員在Java中實現main()方法時有不同的看法?

+1

'void main(void)'是不好的。儘管許多編譯器都允許,但它不包含在C標準中,因此它不具有可移植性。我認爲C++標準甚至禁止它,因爲它要求main有返回類型int(但我避免C++足以不確定)。 –

回答

5

C沒有對象,所有的方法都是靜態的;在C++中,必須將方法聲明爲虛擬的,以使它們不是靜態的。

+1

這是相關的。 C沒有成員函數的概念,所以沒有必要(甚至不可能)在Java中聲明一個靜態函數(在C語言中,聲明一個靜態函數意味着它在它聲明的文件之外是不可見的, d想爲主)。在C++中,函數(方法)默認是靜態的,所以main也被聲明爲靜態的。 –

2

由於main而不對象被實例化運行。因此是靜態方法。

1

如果main()而不是聲明爲靜態,則必須首先實例化類,以便能夠調用該方法。但爲了能夠實例化,需要有一個正在運行的程序。這是一個捕捉22,所以啓動該方法的唯一方法是讓它靜止。

+1

它在問題本身已經提到了一些問題。我的問題只是爲什麼C和C++不是這種情況? – Lion

+0

@Lion,因爲這些語言不像Java那樣乾淨OOPish(我是一個C/C++大粉絲)。C甚至不知道OOP(儘管你可以模擬看起來像它的東西)。在C++中,它就像C兼容性一樣。 – Flavius

3

在java中,整個程序封裝在一個類中。並且該類名通常是該程序的名稱。 該類的靜態成員函數能夠在不使用任何對象的情況下被調用,並且只有一個靜態成員函數的副本被所有對象共享。 由於main函數對於您的java程序的所有對象都是單一的,並且我們沒有使用任何對象來調用main函數。由於這個原因,main被聲明爲static,

相關問題