2014-10-04 191 views
-2

據我所知,當一個對象在給定的類中被創建時,將爲該特定對象分配內存。 但在這種情況下:當兩個類創建對象時會發生什麼?

public class KindA { 
    KindB b = new KindB(); 
    // rest of the code 
} 
public class KindB { 
    KindA a = new KindA(); 
    // rest of the code 
} 

當2類創建海誓山盟的對象在這種情況下發生的對事物的內存分配側什麼?

+0

JVM管理它,你爲什麼在意? – 2014-10-04 10:31:15

+0

但是在這種情況下是不是有遞歸?我想知道在使用此模型編碼之前究竟發生了什麼。 – 2014-10-04 10:33:38

+0

一個類也可以引用它自己。 JVM管理它,作爲Java開發人員,您不需要關心顯式內存管理(實際上,**不是**顯式內存管理)。 – 2014-10-04 10:36:17

回答

4

你會得到一個StackOverflowError,如果你嘗試初始化類之一,因爲KindA初始化創建KindB類型的新對象,因此KindB運行的初始化,創建KindA類型和KindA的新對象初始化器再次運行,這會創建並初始化一個新類型的對象KindB等等......

這是一個無限遞歸,因此是stackoverflow。

+0

當我在類KindA中創建一個KindB對象的Stack(java.util類)時,這會是相同的情況嗎? (反之亦然) – 2014-10-04 10:48:27

+0

它是一個堆棧溢出嗎?不熟悉JVM內存管理,但在C++中,您會從堆中分配這些對象,並最終以這種方式耗盡內存,而不是因爲您砸碎了堆棧。 – adrianmcmenamin 2014-10-04 10:56:34

+0

@KeshavSonni:如果你創建一個'Stack',你不會自動創建一個「元素類型」的實例。因此在'KindA'中創建'Stack '不會導致遞歸(但保留'KindB b = new KindB();'並且不會改變'KindB')。 – fabian 2014-10-04 10:58:55

相關問題