簡體   English   中英

在堆上創建對象(Java)之后是否調用對象的構造函數?

[英]Is the constructor for an object invoked after object creation on heap (Java)?

當通過調用構造函數實例化新對象時,即Foo bar = new Foo(var);

構造函數中的代碼何時真正在與對象創建堆的關系中被調用? 當構造函數修改bar的成員變量時,是否已經存儲了已分配的變量並包含默認值?

一旦調用new ,它將知道需要為堆中的類型變量(例如Foo)分配多少內存。 一旦分配了該內存,便會設置值。 考慮一下,如果沒有足夠的成員變量存儲空間,該如何分配成員變量? 如果沒有內存,則new會引發您需要處理的異常。

處理:

  1. JVM看到了new
  2. 在堆上分配內存以存儲對象(引用類型)
  3. 分配默認值
  4. 如果對象類型為null
  5. 調用構造函數

當JVM遇到new關鍵字時,它將為該類類型分配所需的內存,如果沒有初始化,則它將所有成員初始化為其默認值,如果該成員是一個對象,則將其初始化為null。

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

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

對於成員變量,這是相同規則的遞歸應用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM