天天看點

[Java基礎] 類和對象構造器對象、引用、指針對象的this引用

構造器

構造器是建立類的根本途徑,如果一個類沒有構造器,這個類通常将無法創造執行個體。正因為如此,Java 語言提供了一個功能:如果程式員沒有為一個類編寫構造器,則系統會為該類提供一個預設的構造器。一旦程式員為一個類提供了構造器,系統将不再為該類提供預設構造器。

構造器是一個特殊的方法,值得指出的是,構造器不能定義傳回值類型聲明,也不能使用 void 定義構造器沒有傳回值。如果為構造器定義了傳回值類型,或使用了 void 定義構造器沒有傳回值,編譯時沒有錯,但對于 Java 來說,這就不再是一個構造器了,而是一個普通的方法。

實際上構造器是有傳回值的,當我們用 new 關鍵字來調用構造器時,構造器傳回該類的執行個體引用,可以把該引用當作構造器的傳回值,是以構造器的傳回值類型總是目前類,是以無須定義傳回值類型。但是必須注意:不能在構造器裡顯式使用 return 來傳回目前類的對象,因為構造器的傳回值是隐式的。

對象、引用、指針

類是一種引用資料類型。建立對象後,棧記憶體裡的引用變量并未真正存儲對象裡的屬性資料,對象的屬性資料實際存放在堆記憶體裡,而引用型變量僅僅隻是指向該堆記憶體裡的對象。從這個角度來看,引用型的變量與 C 語言裡的指針很像,它們都是存儲一個位址值,通過這個位址來引用到實際對象。實際上,Java 裡的引用就是 C 裡的指針。隻是 Java 語言把這個指針封裝起來,簡化了開發而已。

當一個對象被建立成功以後,這個對象将儲存在堆記憶體中,Java 程式不允許直接通路堆記憶體中的對象,隻能通過該對象的引用操作該對象。也就是說,不管是數組、還是對象,都隻能通過引用來通路它們。

對象的this引用

this 關鍵字是一個對象的預設引用,總是指向調用該方法的對象,隻能出現在執行個體方法或是構造器中,不能出現在 static 方法中。比如說,我們有一個 Person 類的對象 person,使用 person.eat(); 調用該執行個體方法時,系統就會隐式的向 eat() 方法傳遞了一個 this 引用(指針),指向該 person 對象,這樣,在 eat() 方法的内部就可以使用 this 引用到目前對象 person,進而調用 person 的資源。

this 可以代表任何對象,當 this 出現在某個方法體中時,它所代表的對象是不确定的,但它的類型是确定的,它所代表的對象隻能是目前類;隻有當這個方法被調用時,它所代表的對象才能被确定下來:誰在調用這個方法,this 就代表誰。