細談 物件的初始化過程------記憶體中的實現過程?
阿新 • • 發佈:2019-02-15
今天對於記憶體的理解 又加深了一步:
對下面程式碼的理解:
class Person { private String name="xiaohong"; private int age=23; private static String country="CN"; { System.out.println(name+" "+age); } public Person(String name,int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } } class Demo7 { public static void main(String[] args) { Person p = new Person("小白",20); p.setName("小黑"); } }
記憶體圖解: 上圖為證
總結:
記憶體是底層的真理! 如果,真正的理解了底層記憶體是怎麼實現的,學任何一種語言都很簡單!
因為,你掌握了 金鑰匙!
下面是上面程式碼的執行時 載入過程:
1 JVM 啟動類載入器,前篇介紹過!載入API 類庫和擴充套件類庫!之後載入我們程式中用的
類!例如: Demo7.class , person.class!
2 載入程式碼中的 靜態程式碼塊 static {} 對類 初始化
3 呼叫 Demo 中的 main 函式,進棧!
4 這個時候 Person p = new Person()
在 對記憶體中 開闢記憶體空間,
5 對堆中的成員變數進行 預設初始化
6 對堆中的成員變數進行 顯示初始化
7 執行構造 程式碼塊! 對物件 初始化!
8 執行 構造方法!
9 將 物件的地址 賦值給 p! ( 進棧! )