2014-03-05 71 views
0

你好,我參加了計算機科學1,並在Java中理解構造函數。什麼使合法的構造函數,什麼會使構造函數非法?

我的書中有一個問題要求:

下面的代碼有什麼問題?

public C7e2() 
{ 
    C7e2 r; 
    r= new C7e2; 
} 

我知道你可以寫實例變量爲C7e2 r = new C7e2(); 一旦我創建了一個主要方法,這將是一個合法的程序嗎?儘管它沒有做任何特別的事情。

任何初學者信息都將被大大收到。

+2

你的構造無限遞歸調用本身,基本上,你會得到構造調用構造函數的遞歸無限循環調用構造函數...... –

+0

@ s.bandara :你覺得什麼都沒用? OP詢問如果編譯和運行代碼會發生什麼。他只需要這樣做就可以得到答案。不需要問我們。實驗是收益過程的關鍵部分,是每個科學過程的基礎。 –

+0

@JBNizet我同意所有這些,除非你斷言它不會編譯。它的確如此。我無法想象爲什麼你會認爲不然。 – EJP

回答

0

這將創建一個無限遞歸,直到堆棧溢出。認爲C7e2()構造函數實例化另一個C7e2對象,這將再次調用構造函數,這將實例化另一個C7e2,它將調用...

對象的構造處理該對象的新實例的創建。如果創建該對象需要創建另一個實例,則該第二個實例將需要第三個實例等。

0

在該類的構造函數中,您試圖創建此類的一個對象。問題是這是一個遞歸,當你創建一個C7e2對象時,你的程序將無法工作。不要在類的構造函數中創建對象。

0

您給出的示例是完全合法的,因爲它在語法上是正確的Java代碼,並且會在您修復缺少的括號時進行編譯。但它不會執行,因爲它涉及到對C7e2().

相關問題