[javase學習筆記]-7.4 建構函式的記憶體載入

來源:互聯網
上載者:User

[javase學習筆記]-7.4 建構函式的記憶體載入

這一節我們來說說建構函式在記憶體中是如何被載入的。

我們之前說過,建構函式只有建立對象時才會被調用並且只調用一次。那麼在建立對象的過程中記憶體中的變化是什麼樣的呢?

我們接著上一節的Person類,我們分析

class Person{private String name;private int age;Person()//建構函式,分別為成員變數name和age賦固定的值{name = "baby";age = 1;System.out.println("person run");}Person(String n)//建構函式,有一個初始name參數{name = n;}Person(String n,int a){name = n;age = a;}public void speak(){System.out.println(name+":"+age);}}
我們用下面的兩行代碼來分析一下建構函式在記憶體中的載入過程
class ConsDemo{public static void main(String[] args) {Person p = new Person("小強",10);p.speak();}}
對於上面的測試,我們分析它的運行過程:

1.main方法進棧記憶體,main方法中有一個Person類類型變數p;

2.new建立Person對象,在堆記憶體中建立空間(假如地址為0x0045),該空間中有兩個成員變數name和age;

3.對對象的兩個成員變數進行初始化,此時會自動選擇調用建構函式Person(String n,int a);

4.建構函式Person(String n,int a)進棧記憶體,並且有參數n="小強",a=0;

5.然後在堆記憶體中把參數n和a的數值初始化name和age變數,此時對象的初始化完成;

6.把地址0x0045賦給main方法中的變數p;

7.建構函式Person()出棧,釋放參數n和a;

8.執行p.speak()語句,調用Person類中的speak()方法,則speak方法進棧;

9.執行列印語句,跳出speak方法,speak方法出棧;

10.跳出main方法,main方法出棧,程式運行結束。

我們在上面通過對一個簡單的對象建立過程進行了分析,簡單的學習了建構函式在記憶體中的載入和運行過程,這裡也就是突出了對象的初始化,如果類中沒有定義建構函式,那麼我們在建立對象時會調用預設的建構函式,而當我們定義了建構函式,則會通過參數類型選擇不同的建構函式進行對象的初始化,而且我們知道對象都必須被初始化,初始化就會調用相應的建構函式,所以說,建構函式是必須會進棧記憶體的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.