一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java必學(xué)必會之this關(guān)鍵字

java必學(xué)必會之this關(guān)鍵字

2020-03-08 15:15孤傲蒼狼 JAVA教程

java必學(xué)必會之this關(guān)鍵字,java中this的用法進(jìn)行了詳細(xì)的分析介紹,感興趣的小伙伴們可以參考一下

一、this關(guān)鍵字

  java必學(xué)必會之this關(guān)鍵字

this是一個(gè)引用,它指向自身的這個(gè)對象。

看內(nèi)存分析圖:

java必學(xué)必會之this關(guān)鍵字

  假設(shè)我們在堆內(nèi)存new了一個(gè)對象,在這個(gè)對象里面你想象著他有一個(gè)引用this,this指向這個(gè)對象自己,所以這就是this,這個(gè)new出來的對象名字是什么,我們不知道,不知道也沒關(guān)系,因?yàn)檫@并不影響這個(gè)對象在內(nèi)存里面的存在,這個(gè)對象只要在內(nèi)存中存在,他就一定有一個(gè)引用this。

看下面的例子分析:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package cn.galc.test;
 
public class Leaf {
 
  int i = 0;
 
  public Leaf(int i) {
    this.i = i;
  }
 
  Leaf increament() {
    i++;
    return this;
  }
 
  void print() {
    System.out.println("i = " + i);
  }
 
  public static void main(String[] args) {
    Leaf leaf = new Leaf(100);
    leaf.increament().increament().print();
  }
}

java必學(xué)必會之this關(guān)鍵字

java必學(xué)必會之this關(guān)鍵字

在內(nèi)存中分析main方法的執(zhí)行過程

首先分析第一句話:Leaf leaf = new Leaf(100);

  程序執(zhí)行到這里的時(shí)候,棧空間里面有一個(gè)變量leaf,它指向了我們new出來的在堆空間里面的Leaf對象。new這個(gè)Leaf對象的時(shí)候,調(diào)用了構(gòu)造方法Leaf(),這個(gè)構(gòu)造方法里面有一個(gè)形參i,所以在棧空間里面給構(gòu)造方法分配有一小塊內(nèi)存,名字叫i用來裝傳遞過來的實(shí)參。這里傳過來的實(shí)參是100,所以i里面裝的值就是100。得到這個(gè)值之后,構(gòu)造方法繼續(xù)執(zhí)行,執(zhí)行this.i = i;這里就是把棧空間里面的i的值通過值傳遞給Leaf對象里面的成員變量i,所以成員變量i的值也變成了100。內(nèi)存中的布局如下圖所示:

  java必學(xué)必會之this關(guān)鍵字

  構(gòu)造方法執(zhí)行完之后,為這個(gè)構(gòu)造方法分配的內(nèi)存消失,所以棧里面的i所標(biāo)記的那一小塊內(nèi)存會消失。因此第一句話執(zhí)行完之后,內(nèi)存中的布局如下圖所示:

  java必學(xué)必會之this關(guān)鍵字

接下來分析第二句話:leaf.increament().increament().print();

  首先逐個(gè)分析:leaf.increament(),這里是調(diào)用increament()方法,是對new出來的那個(gè)Leaf對象調(diào)用的,leaf是Leaf對象的引用對象,因此通過這個(gè)引用對象來調(diào)用increament()方法,即相當(dāng)于是Leaf對象自己調(diào)用了increament()方法。increament()方法的定義如下:

?
1
2
3
4
5
Leaf increament(){
  i++;
  return this;
 
}

  因此Leaf對象調(diào)用increament()方法時(shí),首先執(zhí)行方法體里面的第一句話i++;這樣就把Leaf對象的成員變量i的值由原來的100變成了101。此時(shí)的內(nèi)存布局如下圖所示。

java必學(xué)必會之this關(guān)鍵字

  接下來執(zhí)行方法體里面的第二句話:return this;

  這里把this作為返回值,當(dāng)有返回值的時(shí)候,首先會在棧里面給這個(gè)返回值分配一小塊臨時(shí)的存儲空間。這塊存儲空間里面的內(nèi)容是this里面的內(nèi)容。this指向它自身,所以棧內(nèi)存里面的那塊臨時(shí)存儲空間里面裝的this也是指向堆內(nèi)存里面的Leaf對象。

所以leaf.increament().increament().print();這句話里面的left.increament()這一小句話執(zhí)行完之后,內(nèi)存中的布局如下圖所示。

  java必學(xué)必會之this關(guān)鍵字

  leaf.increament().increament().print();這句話里面的left.increament()這一小句話執(zhí)行完之后,返回一個(gè)this,此時(shí)leaf.increament().increament().print();就相當(dāng)于是this.increament().print();

  接著棧里面的存儲在臨時(shí)空間里面的this調(diào)用increament()方法,而this指的就是Leaf對象,所以又是Leaf對象調(diào)用increament()方法。Leaf對象調(diào)用increament()方法時(shí),又會執(zhí)行方法體里面的i++,所以此時(shí)i又由原來的101變成了102。然后又執(zhí)行return this,所以棧內(nèi)存里面又多了一塊臨時(shí)存儲空間,里面裝的值也是this,這個(gè)this又是指向堆內(nèi)存里面的Leaf對象。因此此時(shí)這個(gè)Leaf對象有了四個(gè)指向他自己的引用對象。

  leaf.increament().increament().print();這句話里面的leaf.increament().increament()這一小句話執(zhí)行完之后,都返回了一個(gè)this,所以此時(shí)的leaf.increament().increament().print();就相當(dāng)于是這樣子的:this.this.print();

  接下來又是棧里面的那個(gè)新的this調(diào)用print()方法,使用this來調(diào)用,那就相當(dāng)于是Leaf對象來調(diào)用,Leaf對象自己調(diào)用print()方法將自己的i屬性的值打印出來,所以打印出來的結(jié)果應(yīng)該是102。

  因此main方法里面的整個(gè)程序執(zhí)行完之后,內(nèi)存中的布局如下圖所示:

  java必學(xué)必會之this關(guān)鍵字

  this的總結(jié):this一般出現(xiàn)在方法里面,當(dāng)這個(gè)方法還沒有調(diào)用的時(shí)候,this指的是誰并不知道。但是實(shí)際當(dāng)中,你如果new了一個(gè)對象出來,那么this指的就是當(dāng)前這個(gè)對象。對哪個(gè)對象調(diào)用方法,this指的就是調(diào)用方法的這個(gè)對象(你對哪個(gè)對象調(diào)用這個(gè)方法,this指的就是誰)。如果再new一個(gè)對象,這個(gè)對象他也有自己的this,他自己的this就當(dāng)然指的是他自己了。

以圖文相結(jié)合的方式為大家詳細(xì)介紹java this關(guān)鍵字,希望能夠幫助到大家更好地理解this關(guān)鍵字。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 极品虎白女在线观看一线天 | 亚洲女人国产香蕉久久精品 | 天天色视频 | 欧美xxx000喷水 | 亚洲精品久久麻豆蜜桃 | 亚洲精品国产综合久久一线 | 视频在线欧美 | bbc japanese黑人强行 | 大又大又粗又爽女人毛片 | 精品国产品国语在线不卡丶 | 久久精品国产欧美日韩99热 | 99精品国产在现线免费 | 99视频有精品视频免费观看 | 日本一区二区高清免费不卡 | 欧美精品v日韩精品v国产精品 | 男人把j放进女人的p里视频 | 精品一久久香蕉国产线看观 | 国内精品91最新在线观看 | 亚洲AV永久无码精品老司机蜜桃 | 青青草一区二区免费精品 | 精品国产一区二区三区久久久狼 | 青青草在视线频久久 | 日本中文字幕在线观看视频 | 糖心视频在线观看 | 麻豆网站视频国产在线观看 | 国产色网址 | 日本国产高清色www视频在线 | 精品香蕉99久久久久网站 | a亚洲天堂| 动漫美女强行被吸乳做羞羞事 | 国内会所按摩推拿国产 | 国产精品合集一区二区 | 国产亚洲福利一区二区免费看 | 欧美人xxxxxbbbb | 大奶妈咪女教师 | 红楼梦黄色小说 | 九九久久国产精品大片 | 久久国产综合精品欧美 | 亚洲嫩模吧粉嫩粉嫩冒白浆 | 好大好湿好硬好爽好深免费视频 | 国产亚洲精品久久yy5099 |