Java創建對象過程中,內存的分配

對象的內存分配

我們都知道,要使用類,就一定要爲其創建對象。那麼,在創建對象過程中,內存是如何分配的呢?

類的本質是一種引用數據類型,這與數組是一樣的。比如本文提供的簡單例子程序中的Person類,它有兩個屬性,name和age,而屬性是需要內存來存儲的。我們以person對象來講解。執行Person person=null; 時,Java系統會在棧內存開闢一個空間給對象person,程序繼續向下執行到person=new Person(); 時,Java系統會在堆內存開闢空間保存對象person屬性(注意是屬性)的內容。person變量本身存儲的只是一個地址值,沒有存儲任何實際數據,但是它指向了Person類。所以當訪問person對象的屬性和方法時,實際上訪問的是person所引用對象的屬性和方法。

堆內存中的變量可以有多個引用,但是它們實際引用的是同一個類,如果對其中一個對象進行修改,那麼其他對象的屬性也會發生變化,因爲它們指向同一個類。

可以這麼說,對象的名稱保存在棧內存中,而對象的屬性保存在以new爲關鍵字才能開闢的堆內存中。在Java中,當爲類創建一個對象時,編譯器會爲對象的各個類型的成員變量進行初始化,無論是基本數據類型還是引用數據類型。

注意:對象在使用前一定要實例化,如果對象沒有實例化而直接使用,那麼編譯時就會出現空指針異常

本文例程代碼:

public class hello {
 
    public static void main(String[] args) {
        Person person=null;
        person=new Person();
        person.say();
    }
 
 
}
class Person{
    String name="Ters";
    int age=18;
    public void say() {
        System.out.println(name+" "+age);
    }
}


匿名對象

匿名對象是指沒有棧空間的對象,即沒有明確的名字給出對象。匿名對象使用的是堆內存,是通過關鍵字new進行開闢,因爲沒有對應的棧內存空間引用,所以對象只能使用一次。

new Person().say();


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章