簡體   English   中英

構造函數的執行順序和對象的創建

[英]Execution order of constructor and creation of object

嗨,大家好我很困惑java的一個非常常見的概念。 說,“A”是一個類,所以當編譯器到達語句new A(); 會發生兩件事

  1. 對象創建(因為新關鍵字)
  2. 構造函數調用。

我正在尋找的唯一一點(困惑)是“執行順序是什么?”

在創建對象之前調用構造函數調用或構造函數之前,會發生對象創建???

當語句A = new A()被調用時;

  1. JVM搜索類A,如果類加載器尚未加載類A,則加載類A.此時調用類A中的static {}塊。

  2. 然后分配內存(它是指你的“對象創建”?)

  3. 然后調用構造函數。 (哪個構造函數正在運行)

執行過程是 -

  1. 分配對象存儲器
  2. 初始化具有初始值的字段變量,然后調用構造函數,但其​​代碼在對象超類的構造函數代碼之后執行。

在單線程應用程序中,序列將是:1)由類加載器加載的類(這里是所有靜態初始化)2)創建的類實例3)返回並分配對此實例的指針,之后返回控件。

在多線程環境中,事情並非如此簡單,在列表競爭條件下確實很重要。

在邏輯對象創建期間在實例上調用構造函數。
所以內存是保留和填充的,后一部分是由contstructor完成的。

當然,所有這些都是在創建了類實例之后。

如果你的類是一個類的層次結構,它會變得更復雜,因為構造函數在被調用時會調用它的超類構造函數。

好的,得到了​​答案的人。 謝謝。 將點編譯為:

  1. 類加載(使用靜態成員)
  2. 對象加載(首先執行IIB,然后分配給NS變量的值)
  3. 構造函數由“this”指針調用

暫無
暫無

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

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