前言因為談構造器,可定涉及到super關鍵字和this關鍵字。其中This指的是當前對象的引用,super是當前對象裡面的父類對象的引用。所以在寫本文之前,先來談談Super關鍵字。Supper1. 在java中使用super來引用基類的成分:1)super關鍵字是用來實現子類訪問父類的因為子類在隱藏了父類的成員變數或者重寫了父類的方法後,有時還有可能要用父類的成員變數和方法,這時訪問父類的成員變數或者調用父類的方法就要用到super關鍵字來實現.2)super具體使用情境如下:
a.當子類要調用父類的建構函式時用到。
b.當子類要調用父類被重寫的方法時用到。
c.當子類要訪問父類被隱藏的成員變數時用到2.樣本分析1)代碼解釋1))大家知道,如果一個類從另一個類繼承時,我們new一個子類對象時,該對象會包含了父類對象,哪我們改如何引用裡面父類對象呢?,答案是使用super.2))當你new一個對象出來時,它會有一個this引用,這個引用指向對象自身。Super 指向當前對象的父類對象3))具體的記憶體中的棧和堆結構如:
本文局部變數與成員變數
1.java 的局部變數和方法參數在棧區中分配,分配的大小是按照變數類型確定
2.成員變數在堆區中分配空間,而且自動賦初值
註:
1)成員變數被包含在對象中
對象是在堆區中被分配,按照類中聲明屬性來分配空間
屬性的訪問方式 :引用.屬性名稱 可以取值也可以賦值(靜態訪問)
2)方法的調用:
類的外部調用: 引用。方法名(參數)
類的內部調用:方法名(參數)
2.構造器(不能被繼承)
用來描述對象建立過程的一個特殊方法
構造器
模型(類)————>對象
參數
1)構造方法的文法:
修飾符 類名(資料類型 變數名){
}
註:
1))java中的構造器聲明在類的內部
2))方法名與類名相同的方法叫構造器
3))構造器不能聲明返回值類型
4))構造器可以包含參數,參數一般都是建立對象所依賴的條件
5))一個建立對象的簡單的分析圖
2)構造器重載
1))什麼叫overLoad:
相同的動作產生的結果卻不同(方法表達的語義相同,但實現的過程卻不同)
2))構造器的重載:
構造器的名稱相同,構造器的參數列表不同
註:
方法的重載是方法名相同,方法簽名不同的方法
3))構造器重載的作用:
為了方便使用者使用構造器產生不同的對象,適應使用者需求,實現 構造器的重用
3)預設構造器:
javac過程中,系統會自動加上一個無參構造器(前提是,類中沒定義構造器)
4)this關鍵字:
this是當前對象的引用,是運行期當前對象的本身
可使用this明確當前對象的方法和屬性
註:
在類的內部,訪問屬性,this。屬性名稱,其中this在沒有局部變數和屬性同名可以省略。
1)))this(參數列表)
使用它可以調用本類的其他構造器,可以使代碼重用;
必須寫在構造器的第一行(對象在沒有完成建立,其他的代碼執行,都不符合常理).
註:對方法的補充解釋
方法:用來表示對象的功能,它依賴於對象而存在。方法是動作,一般使用動詞來聲明
6)程式碼分析樣本:(重點)
代碼:
Cal c=new Cal(2,3);
int result=c.add(XXX,XXX);
system.out.println(result);
1))
Cal c=new Cal(2,3);的分析
1)))在堆區開闢一片空間,然後空間包含屬性和方法的引用,為屬性賦予零值
2)))調用對應構造器,構造器的調用也是一一映射,執行構造器的代碼。將實參給構造器中的形參,將形參壓入棧中
3)))在棧區中開闢一片引用空間(this)用來記錄當前堆區中對象的首地址
4)))使用this.屬性找到堆區中屬性的位置,並對其賦予對應的值
5)))當構造器執行完,彈出構造器中局部變數
6)))方法執行到main方法中,在棧區中開闢引用空間c,然後賦值null
7)))將堆區中的對象的首地址賦值到棧中的引用
int result=c.add();的分析
1))使用c的空間儲存的地址,找到堆區中的add()方法的引用
2)))再通過通過堆區中方法的引用,找到方法區中的方法以及方法體
3)))開始執行add()方法,將方法調用中的實參按照位置賦值給方法定義中的形參
4)))在棧區開闢空間,儲存add方法的參數的值
5)))執行Cal的add方法,通過this.屬性尋找堆區中的值進行運算
6)))將運算的結果儲存在棧區,在棧區開闢一個空間result(局部變數),將中間結果賦值給result
7)))將result的值作為放回值返回,這是add方法執行完畢
8)))將add中的局部變數彈棧,回到mian方法中,add將其放回值帶回,在棧區開闢空間,用來儲存方法的放回值
9)))在棧區中開闢空間result,並將方法的返回值賦值給result
system.out.println(result);的分析
1)))找到棧區中result的值,輸出
2)))當main方法執行完畢,將棧區清空,記憶體回收行程gc回收堆區中的空間,類裝載器卸載方法區中的代碼
總結多對代碼進行詳細的分析,進一步加深對記憶體的儲存分配,有益於將來的代碼的編寫和調優。多畫畫記憶體配置圖的每一步,並寫上注釋。尤其對於初學者這是個關鍵的學習環節。