Java中物件的建立過程(記憶體分析)
阿新 • • 發佈:2019-02-05
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類:
程式碼建立了一個Cat類的具體例項,給Cat的name,age屬性賦值,然後呼叫了一個eat方法package cn.sg.oop.second; public class Cat { String name; int age; public void eat(){ System.out.println("小貓正在吃......"); } }
就這幾行基本的語句,我們看在記憶體中發生了什麼?
看具體的程式碼
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,然後通過地址找到目的地,然後進行相關的操作,由此可見地址的重要性。
對於基本的瞭解物件在記憶體中儲存,大概就是這樣,其實在堆中,其實還有有劃分的,小白的我就說這麼多了。