【java面向物件】記憶體分析
阿新 • • 發佈:2018-12-10
情景匯入 |
今天小編來說說一個物件的基本初始化過程。下面這個小demo有Student和StudentTest兩個類。 Student類: 成員變數:name,age 成員方法:study,eat StudentTest類中: (1)建立物件——輸出成員變數的值,這裡輸出的是預設值 (2)給成員變數賦值——再次輸出成員變數的值,輸出的是賦值後的 (3)最後呼叫了方法
執行結果:
準備工作 |
在記憶體中有3個區:棧、堆、方法區。 方法區中分為兩部分,一部分是StudentTest;一部分是Student,有成員變數、成員方法,其中成員方法有個地址:001 程式執行,將main()方法載入到棧,開闢一個空間
執行Student s=new Student(); |
在此空間中,出現Student s 在堆記憶體中執行new Student() 在堆記憶體中開闢一個空間,裡面的資料參照Student,特殊的是成員方法中存的是方法區中的地址。最後自身再生成一個地址,002,並把它賦值給p
輸出成員變數 |
輸出成員變數時,s通過002找到堆中相對應的區域。
呼叫 | 結果 |
---|---|
s.age | 年齡:0 |
給成員變數賦值 |
再次輸出:
呼叫 | 結果 |
---|---|
s.age | 年齡:15 |
呼叫成員方法 |
調方法中,s通過002找到堆中的001,然後再找到方法區中的study(),將其載入到棧記憶體,開闢空間。執行study()方法,將“小紅”傳到Student中,然後輸出“向小紅學習”。