this 關鍵字的理解--java學習筆記(轉)
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的引用!是一個記憶體的地址,我們可以把它列印出來看看,就知道了!
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Javascript中的關鍵字'this'學習筆記JavaScript筆記
- SQLServer學習筆記 - 主鍵的理解SQLServer筆記
- 【學習筆記】make 和 new 關鍵字的區別筆記
- JAVA static關鍵字理解Java
- Object C學習筆記24-關鍵字總結Object筆記
- Java關鍵字volatile的理解Java
- 【尚矽谷-Java學習】5.3 關鍵字 superJava
- java final和static關鍵字學習Java
- iOS @property及其關鍵字學習記錄iOS
- 《從零開始學Swift》學習筆記(Day 47)——final關鍵字Swift筆記
- Java開發筆記(五十五)關鍵字static的用法Java筆記
- 深入理解JVM讀書筆記五: Java記憶體模型與Volatile關鍵字JVM筆記Java記憶體模型
- java學習——併發專題——synchronized關鍵字Javasynchronized
- Java關鍵字理解與總結(未完)Java
- Java開發筆記(四十九)關鍵字super的用法Java筆記
- 深入理解Java中的volatile關鍵字Java
- 深入理解Java中的final關鍵字Java
- day05_我的Java學習筆記 (方法的定義、呼叫、傳參、方法過載,return關鍵字)Java筆記
- 全面理解Java記憶體模型(JMM)及volatile關鍵字Java記憶體模型
- PHP 手冊 (類與物件) 學習筆記九:Static(靜態)關鍵字PHP物件筆記
- Java相關課程系列筆記之一Java學習筆記Java筆記
- 完全理解關鍵字this
- 《從零開始學Swift》學習筆記(Day 3)——Swift 2.0之後增加的關鍵字Swift筆記
- XML學習筆記(一):關於字元編碼的理解XML筆記字元
- 一個具體的例子學習Java volatile關鍵字Java
- Java課堂篇4_關鍵字this、static的理解Java
- 深入理解Java記憶體模型JMM與volatile關鍵字Java記憶體模型
- 關鍵字、Package 包的使用、import 的用法 - Go 學習記錄PackageImportGo
- java學習筆記Java筆記
- Java多執行緒學習(三)volatile關鍵字Java執行緒
- batch normalization學習理解筆記BATORM筆記
- 重新學習JAVA的筆記Java筆記
- 《JAVA學習指南》學習筆記Java筆記
- Java面試題,深入理解final關鍵字Java面試題
- 深入彙編指令理解Java關鍵字volatileJava
- Java 的 static 關鍵字Java
- JAVA中的關鍵字Java
- 完全理解JavaScript中的this關鍵字JavaScript