2014-05-16 63 views
3

我可能是錯誤的,但由在Java創建對象時我的理解:當對數組和對象調用new運算符時究竟發生了什麼?

Class object = new Class; 

new Class創建類類型的新的對象,然後將其施加到"object"參考

所以當u創建陣列通過對象:

Class[] objects = new Class[10]; 

意思new Class[10]創建類型至極的10個對象,然後施加到objects參考或只是一個大小爲Class類型的10個對象的內存被保留,您需要稍後創建某些對象

+0

它會創建10個塊的所有Class對象的大小。然後你會在這個地方創建對象 –

+0

你忘了()不是斯卡拉的xD – nachokk

回答

1

以後是正確的new Class[10]將爲內存中的10個對象創建一個佔位符,並且您需要明確地將對象放入其中。

+0

那麼,爲什麼新的Class實際上是在內存中創建對象,而不是佔位符1個對象還是我錯誤的理解呢? – user3629811

+0

你的理解是正確的,這是一個對象之間的區別和對象[] – Sanjeev

+0

THX 1件事;從烴源:http://www.cplusplus.com/reference/new/operator新的[] /(我知道這是C++,但它應該是相似的),它說的是對的對象的數量產生記憶「,如果這是成功的,然後它自動初始化或陣列中的構造中的每個對象(如果需要)」,所以當‘如果需要的話’的情況下 – user3629811

0

new Class[10]確實爲10個佔位符創建了內存。它不爲單個條目分配內存。

0

請考慮以下示例: bool [] booleanArray; FileInfo []文件;

booleanArray = new bool[10]; 
files = new FileInfo[10]; 

這裏,booleanArray中是值類型System.Boolean的陣列,而文件陣列是一個引用類型,System.IO.FileInfo的陣列。下圖顯示了這四行代碼執行後對CLR託管堆的描述。

enter image description here

Eventhough這是一個C#示例。這與我們在Java中的類似。

0

objects將是一個指針數組的指針。這些指針將指向Class類型的對象。沒有內存分配給任何人,但實際的指針。所以新類[10]創建了10個指針,這些指針由對象引用。

0

創建對象的數組類似於創建變量即代碼 Class[] objects = new Class[10];可以被解釋爲

Class object1; 
Class object2; 
... 

使用它們或調用功能和訪問我們必須調用構造即變量。

object1 = new Class(); 
object2 = new Class(); 

所以Class[] objects = new Class[10];是創造類的10篇參考文獻,沒有內存分配已經爲這些對象已經完成。爲了做到這一點,我們必須調用它們的構造函數,如object[0] = new Class(); 現在已創建的對象已經分配了內存,我們可以使用它們。 另外,如果在創建沒有調用構造函數的對象數組後,我們使用它們像對象[0] .somefunction()它將顯示空指針異常。

相關問題