先放一張截圖
從main方法開始執行整個記憶體分析情況如下:
1、main方法在棧去分配記憶體空間。程式執行時,方法沒有被呼叫前,方法是沒有記憶體空間的,只有方法在被呼叫時,才會進行壓棧動作,在棧去分配記憶體空間。
2、程式開始執行person p1=new person()建立person物件,main方法在main方法內部給p1變數分配記憶體空間,開始執行new運算子,會在堆區分配儲存空間,並且為堆區的屬性初始化,接著呼叫person(),person的無參構造方法,會在棧區分配儲存空間(只用是方法都會在棧區分配儲存空間,構造方法也是方法),無參構造方法執行完畢都,構造方法會釋放空間。
3、接著執行『』=『』等號運算子,會將新建立的person物件的記憶體位址賦值給p1,p1儲存的值其實是物件在堆區的記憶體位址,指向堆區的物件。
4、接著p1呼叫showinfo()方法,會在棧區分配一塊記憶體給showinfo(),會列印剛才建立物件的屬性值,因為沒有為物件賦值,所以會列印建立物件時系統為屬性賦預設值。
5、接著建立第二個物件,person p2=new person();繼續執行上面建立物件的步驟,首先,main方法給p2分配記憶體空間,執行new運算子,在堆區分配儲存空間,並初始化,接著呼叫person有參構造方法,為person類中屬性賦值,其中,「lisi」,「男」屬於字串常量,直接儲存在fang方法區中的常量區中,會將這兩個常量的記憶體位址賦值給name和gender屬性,所以name和gender儲存的是常量值的記憶體位址。而age和height屬於基本值,所以這兩個屬性直接儲存的是值。
6.當p1=p2執行時,p2會第二次建立的物件的引用即位址賦值給p1.p1引用也將指向這個物件。
7.當p1呼叫showinfo()方法時,就會把lisi,男,20,180列印出來。
8.當方法執行完之後,會彈棧,釋放空間。
物件的建立和方法的呼叫記憶體空間基本就這樣。
java方法呼叫記憶體相關
public class test2 class father public void doget class child extends father public void doget 結果是 child service parent service child doget比較難以理解的是呼叫s...
反射 建立物件 呼叫方法
通過反射建立物件的思路 1.首次獲取類的類物件,獲取方式看前一篇部落格。2.呼叫類物件的newinstance 方法建立該類的實體物件。這是呼叫的類的預設構造器。若想呼叫非預設的構造器建立例項物件,需要先通過class物件獲取構造器,在用構造器呼叫newinstance 方法建立。例子 建立乙個物件...
JAVA 構造方法和物件的建立
一 構造方法和物件的建立 package chapter4.constructor public class testconstructor 和基本資料型別不同,在用類宣告物件後,還必須建立物件。即為宣告的物件分配所擁有的變數 確定物件所具有的屬性 類是建立物件的模板,沒有類就沒有物件。一 構造方法...