1. 程式人生 > >Java中物件的建立過程(記憶體分析)

Java中物件的建立過程(記憶體分析)

Java中物件建立的時候,用到了new關鍵字。那麼在記憶體中,究竟發生了什麼?

下面先看一段簡單的程式碼:

先是主函式類(Animal)

package cn.sg.oop.second;
public class Animals {
    public  static  void main(String []args){
    	Cat c=new Cat();
    	c.name="小喵喵";
    	c.age=18;
    	c.eat();
    }
}
然後是一個簡單的Cat類:
package cn.sg.oop.second;
public class Cat {
          String  name;
          int age;
          public  void eat(){
        	  System.out.println("小貓正在吃......");
          }
}

程式碼建立了一個Cat類的具體例項,給Cat的name,age屬性賦值,然後呼叫了一個eat方法

就這幾行基本的語句,我們看在記憶體中發生了什麼?



看具體的程式碼

Cat c=new Cat();
Cat  c,在記憶體中把c放入棧中

在new Cat的時候,在堆中建立cat,包括cat類中的屬性和方法

並給屬性初始化,8種基本的資料型別系統都有預設值,比如數值型別的預設為0,除8種基本的資料型別外,其他的引用型別的統一預設為null,如把age預設為0;Cat  c=new  Cat(),即把c的地址傳給c;需要注意的是這裡是地址引用。到目前為止,即把第一條語句Cat  c=new  Cat()執行完了。

然後是

c.name="小喵喵";
這條語句首先在棧中找到c,通過地址的指向,找到name,賦值為“小喵喵”;
c.age=18;
c.eat();
這兩條語句基本相同,先找到c,然後通過地址找到目的地,然後進行相關的操作,由此可見地址的重要性。

對於基本的瞭解物件在記憶體中儲存,大概就是這樣,其實在堆中,其實還有有劃分的,小白的我就說這麼多了。