this 關鍵字的理解--java學習筆記(轉)

ba發表於2007-08-15
this 關鍵字的理解--java學習筆記(轉)[@more@]徹底理解this 關鍵字的含義

this關鍵字再java裡面是一個我認為非常不好理解的概念,:)也許是太笨的原因

this 關鍵字的含義:可為以呼叫了其方法的那個物件生成相應的控制程式碼。

怎麼理解這段話呢?

thinking in java裡面有這麼一個例子

有兩個同一個型別的物件,分別叫做a和b,那我們怎樣區別在呼叫方法f()的時候,是誰再呼叫這個方法呢?

例如:

class Banana {

void f(int i){

/***方法主體*****/





Banana a = new Banana();//生成Banana的物件a

Banana b= new Banana();//生成Banana的物件b

a.f(1);

b.f(2);

那麼編譯器是怎樣知道你是要呼叫哪個物件的f()函式呢?其實幕後的傳送應該是:

a.f(1)<<====>>Banana.f(a,1);

b.f(1)<<====>>Banana.f(b,2);

我理解為:生成一個Banana的物件a,呼叫a的方法f()的時候,會同時生成一個指向這個物件的一個控制程式碼this

這裡就是this 這個指向物件 new Banana()或者 this 在這裡等價於控制程式碼 a;this《==》a;

當我們在一個方法的內部的時候。並且希望獲得當前物件的控制程式碼,由於這個控制程式碼時編譯器秘密傳遞的,所以時沒有明確的標誌符來識別的,這個時候我們可以使用this這個關鍵字

this的通俗含義:不論是生成的哪個物件呼叫了這個方法,都會生成一個指向這個物件的指標 this

thinking in java 裡面的經典例子:

public class Leaf{

private int i=0;

Leaf increment(){

i++;

return this;

}

void print(){

Systme.out.println("i="+i);

public static void main (String [] args)

{

Leaf x =new Leaf();

x.increment().increment(). increment().print();

}

}

1、生成一個物件的控制程式碼 x ;語法格式為 Leaf x;

2、生成一個Leaf class的物件;語法格式為 new Leaf();

3、建立控制程式碼與物件的聯絡 ;語法為 x = new Leaf();

4、呼叫物件 new Leaf()裡面的方法 increment();語法為 x.increment()

×××誰呼叫了方法 increment()呢?是Leaf類的物件x(或者是new Leaf()),所以對應系統會生成一個this 引用,並把它秘密的指向 x 或者是 指向 new Leaf()這個物件,所以 increment()返回的是一個指向x的引用!是一個記憶體的地址,我們可以把它列印出來看看,就知道了!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958142/,如需轉載,請註明出處,否則將追究法律責任。

相關文章