2010-03-10 85 views
0

當你實例調用構造一個新的對象,即 Foo bar = new Foo(var);在堆(Java)上創建對象之後調用對象的構造函數嗎?

什麼時候在構造函數中的代碼實際上獲取關係調用來創建對象堆?當構造函數修改bar的成員變量時,是否存儲已分配的變量幷包含默認值?

+0

@theactiveactor - 你需要更多的幫助嗎?我注意到這個問題沒有得到任何批准就被打開了。 – JonH 2010-03-12 13:42:03

回答

3

一旦調用了new,它就知道需要將多少內存分配到一個變量類型的堆中,在您的情況下是Foo。一旦只分配了內存,那麼是設置的值。想想看,如果你沒有成員變量的內存,你還有什麼要分配成員變量?如果沒有內存,新的會拋出一個你需要處理的異常。

過程:

  1. JVM上看到存儲對象如果對象的類型分配null
  2. 呼叫堆(Ref類型)
  3. 分配缺省值
  4. new
  5. 分配內存構造函數
+1

5)調用構造函數 - 這是原始問題 – 2010-03-10 18:06:38

+0

@ian - 對不起,我添加了:)。謝謝你! – JonH 2010-03-10 18:14:25

+0

你能說這些信息的來源嗎?我想了解更多。 – 2010-03-31 12:52:05

0

當JVM遇到新的關鍵字時,它爲該類類型分配所需的內存,如果沒有初始化,則它將所有成員初始化爲其默認值,並且如果該成員是對象,則爲空。

0

這裏 Foo bar = new Foo(var);我們正在創建bar對象。當我們使用時,新的關鍵字的內存分配在堆上。分配的內存量取決於類的實例變量.JVM將計算要分配的內存量,然後使用新的它將分配內存。這裏是一個引用變量指向對象分配的堆。

0

構造函數不能被調用,直到內存存在。

對於成員變量,它是同一規則的遞歸應用程序。

相關問題