1. 程式人生 > >Java中物件的初始化過程詳解

Java中物件的初始化過程詳解

在Java中,我們需要對物件進行初始化操作。
經常需要new 物件。但是new物件時到底發生了什麼呢?
有時候我們不是特別清晰。
所以今天又重新學習了一下JavaSE部分,又有了新的感受。
在此記錄一下
首先程式碼部分

Person類:

class Person{
    private String name;
    private int age;
    private static String country = "cn";
    Person(String name,int age){
        this.name = name;
        this
.age = age; } //構造程式碼塊 { System.out.println(name+".."+age); } //靜態程式碼塊 static{ System.out.println("靜態程式碼塊"); } public void setName(String name){ this.name = name; } public void speak(){ System.out.println(this.name+"..." +this
.age); } public static void showCountry(){ System.out.println("country="+country); } }

PersonDemo類(測試類)

class PersonDemo{
    public static void main(String[] args) {
        Person p = new Person("zhangsan",20);
    }
}

在Person p = new Person(“zhangsan”,20);

在執行這句這行程式碼時做了什麼呢?

首先棧記憶體中有個引用(p)
右邊有 值(new Person())所以需要載入Person類,
當Person p = null;是不會載入Person類的
這裡寫圖片描述
1. new 物件的的時候。JVM從硬碟中取Person.class檔案並載入到記憶體中。
2. 執行該類中的static程式碼塊(靜態程式碼塊),如果有的話,給Person.class類進行初始化
3. 並開闢了堆記憶體空間。分配記憶體地址
4. 在對記憶體中建立物件的特有屬性,並進行預設初始化(比如int型別預設為0,引用型別預設為null等)。
5. 對屬性進行顯示初始化,
6. 對物件進行構造程式碼塊初始化
7. 對物件進行對應的建構函式初始化
8. 將記憶體地址賦值給棧記憶體中的p變數