首先創(chuàng)建一個People實體類
package com.zhang.java_base.bean;
/**
* @program:
* @description:
* @author: 尋。
* @create: 2018-06-01 09:54
**/
public class People {
private String name ;
static{
System.out.println("靜態(tài)代碼塊執(zhí)行。。。");
}
{
System.out.println("構(gòu)造代碼塊執(zhí)行");
}
public People(){
System.out.println("無參構(gòu)造器執(zhí)行");
}
public static void main(String[] args) {
People people = new People();
System.out.println(people);
}
}
我們這邊在main方法中測試下創(chuàng)建對象的過程。
靜態(tài)代碼塊執(zhí)行。。。
構(gòu)造代碼塊執(zhí)行
無參構(gòu)造器執(zhí)行
com.zhang.java_base.bean.People@2f92e0f4
因此得出結(jié)論:
People people = new People();
這句話都做了什么事情呢?
- 因為new用到了People.class,所以會先找到People.class文件并加載到內(nèi)存中;
- 執(zhí)行該類中的static代碼塊,如果有的話,給People.class類進(jìn)行初始化;
- 在堆內(nèi)存中開辟空間,分配內(nèi)存地址;
- 在堆內(nèi)存中建立對象的特有屬性,并進(jìn)行默認(rèn)初始化;
- 對屬性進(jìn)行顯示初始化;
- 對對象進(jìn)行構(gòu)造代碼塊初始化;
- 對對象進(jìn)行對應(yīng)的構(gòu)造參數(shù)初始化;
- 將內(nèi)存地址賦值給棧內(nèi)存中的people變量;