簡體   English   中英

在對象創建過程中到底發生了什么? (爪哇)

[英]What exactly happens during object creation? (Java)

我一直在學習Head First Java ,目前正在學習構造函數章節。 他們已經解釋過,通過在new關鍵字之后調用構造函數來創建對象。

我的問題:創建新對象時運行的到底是什么?

讓我們將以下內容作為示例代碼:

public class Const {

    // instance variables
    int number;
    String name;


    // Constructors
    public Const() {
        //implicit super
        System.out.println("no-arg constructor");
    }
    public Const(int i, String s) {
        //implicit super()
        number = i;
        name = s;
        System.out.println("two-arg constructor");
    }


    // test method
    public void doSomething() {
        System.out.println("I'm a test");
    }


    // Main
    public static void main(String[] args) {

        Const c1 = new Const();
        Const c2 = new Const(5, "Jerry");
    }
}

現在這是我認為在創建c1時正在發生的事情:

  1. public Const()被調用
  2. super()被調用
  3. 構建了 Const 的Object部分。
  4. public Const()回到棧頂。
  5. 現在我的麻煩來了。 對象的實例變量和方法是何時以及如何創建的(添加了哪些隱式代碼)?

在對象創建過程中到底發生了什么? (爪哇)

  • 被調用的構造函數,會調用父類的super方法(默認為Object類,所以新的Class可以訪問Object類的所有成員)
  • 內存分配
  • 字段被初始化(通過賦值或者如果沒有給出則默認值)
  • 將執行構造函數的其余代碼塊

所以這里唯一的區別是:

Const c1 = new Const();

這里 number 將被初始化為 int 默認值0和 name 將被初始化為null ,這是 String 的默認值

Const c2 = new Const(5, "Jerry");

相反,這里將分別是 5 和 Jerry

使用new Const() ,將調用構造函數並將類加載到主內存中。

public Const() {
        //implicit super 
        super()
    }

java中的super關鍵字是一個引用變量,用於引用父類對象,默認為Object類。 關鍵字“super”帶着繼承的概念出現了。

所以現在它可以訪問 Object 類的所有成員,即 toString, equals :

你可以訪問

c1.toString() or c1.equals(obj)

對象的實例變量和方法是何時以及如何創建的(添加了哪些隱式代碼)?

我想現在你明白了實例變量是如何創建的,默認值是根據類型分配給它們的。

如果仍然不清楚,請嘗試了解內部拱門,這可能會有所幫助:

JVM 架構

暫無
暫無

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

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