構造函數:用於給對象進行初始化,是給與之對應的對象進行初始化,它具備針對性,函數中的一種。函數
特色:spa
1:該函數的名稱和所在類的名稱相同。對象
2:不須要定義返回值類型。內存
3:該函數沒有具體的返回值。class
記住:全部對象建立時,都須要初始化纔可使用。變量
注意事項:一個類在定義時,若是沒有定義過構造函數,那麼該類中會自動生成一個空參數的構造函數,爲了方便該類建立對象,完成初始化。若是在類中自定義了構造函數,那麼默認的構造函數就沒有了。構造函數
一個類中,能夠有多個構造函數,由於它們的函數名稱都相同,因此只能經過參數列表來區分。因此,一個類中若是出現多個構造函數。它們的存在是以重載體現的。引用
構造函數和通常函數有什麼區別呢?方法
1:兩個函數定義格式不一樣。margin
2:構造函數是在對象建立時,就被調用,用於初始化,並且初始化動做只執行一次。
通常函數,是對象建立後,須要調用才執行,能夠被調用屢次。
何時使用構造函數呢?
分析事物時,發現具體事物一出現,就具有了一些特徵,那就將這些特徵定義到構造函數內。
構造代碼塊和構造函數有什麼區別?
構造代碼塊:是給全部的對象進行初始化,也就是說,全部的對象都會調用一個代碼塊。只要對象一創建。就會調用這個代碼塊。
構造函數:是給與之對應的對象進行初始化。它具備針對性。
Person p = new Person();
建立一個對象都在內存中作了什麼事情?
1:先將硬盤上指定位置的Person.class文件加載進內存。
2:執行main方法時,在棧內存中開闢了main方法的空間(壓棧-進棧),而後在main方法的棧區分配了一個變量p。
3:在堆內存中開闢一個實體空間,分配了一個內存首地址值。new
4:在該實體空間中進行屬性的空間分配,並進行了默認初始化。
5:對空間中的屬性進行顯示初始化。
6:進行實體的構造代碼塊初始化。
7:調用該實體對應的構造函數,進行構造函數初始化。()
8:將首地址賦值給p ,p變量就引用了該實體。(指向了該對象)