最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

this關(guān)鍵字詳解

 更新時間:2019年03月20日 11:20:41   作者:冰湖一角  
這篇文章主要介紹了this關(guān)鍵字,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Java提供了一個this關(guān)鍵字,this關(guān)鍵字總是指向調(diào)用該方法的對象。根據(jù)this出現(xiàn)的位置的不同,this作為對象的默認引用有兩種情形。

1)構(gòu)造器中引用該構(gòu)造器正在初始化的對象。

2)在方法中引用調(diào)用該方法的對象。

this關(guān)鍵字最大的作用就是讓類中一個方法,訪問該類里的另一個方法或者實例變量。假設定義了一個Person類,這個Person對象的eat()方法需要調(diào)用它的move()方法,則如何做呢?是否應該定義如下的Person類呢?

public class Person {
    
    //定義一個move()方法
    public void move(){
      System.out.println("正在執(zhí)行move()方法");
    }
    //定義一個eat()方法,eat()方法需要借助move()方法
    public void eat(){
      Person p = new Person();
      p.move();
      System.out.println("正在執(zhí)行eat()方法");
    }
    
    public static void main(String[] args) {
      //創(chuàng)建Person對象
      Person p = new Person();
      //調(diào)用Person的eat()方法
      p.eat();
    }
  }

運行結(jié)果為:

正在執(zhí)行move()方法
正在執(zhí)行eat()方法

以上這種方式確實能夠做到在eat()方法里調(diào)用move()方法,但從main()方法里的程序中可以看出,一共創(chuàng)建了兩個對象:main()方法里創(chuàng)建一個對象;eat()方法里創(chuàng)建一個對象。可是真的需要創(chuàng)建兩個對象嗎?答案是否定的!因為當程序調(diào)用eat()方法時一定會提供一個Person對象,而不需要重新創(chuàng)建一個Person對象了。

因此需要在eat()方法中獲得調(diào)用該方法的對象,通過this關(guān)鍵字就可以滿足這個需求。

this可以代表任何對象,當this出現(xiàn)在某個方法體中時,它所代表的對象是不確定的,但它的類型是確定的,它所代表的類型只能是當前類:只有當這個方法被調(diào)用時,它所代表的對象才被確定下來:誰在調(diào)用這個方法,this就代表誰。

將上面的Person類中的eat()方法改為一下這種方式更合適:

//定義一個eat()方法,eat()方法需要借助move()方法
public void eat(){
  //使用this引用調(diào)用eat()方法的對象
  this.move();
  System.out.println("正在執(zhí)行eat()方法");
}

上述程序中eat()方法需要依賴于move()方法,現(xiàn)實中這種依賴情形非常常見,例如寫字方法需要拿筆的方法,這種依賴都是同一個對象兩個方法之間的依賴。因此,Java允許對象的的一個成員直接調(diào)用另一成員,可以省略this前綴。也就是說,上面的程序可以改為如下形式:

public void eat(){
  move();
  System.out.println("正在執(zhí)行eat()方法");
}

另外一種情形是:this關(guān)鍵字可用于構(gòu)造器中作為默認引用,由于構(gòu)造器是直接使用new關(guān)鍵字來調(diào)用,而不是使用對象來調(diào)用的,所以this在構(gòu)造器中代表該構(gòu)造器正在初始化的對象。例如下面的程序:

public class Person {
    //定義一個名為age的成員變量
    public int age;
    
    //構(gòu)造器
    public Person() {
      //在構(gòu)造器里定義一個age變量
      int age = 0;
      //使用this代表該構(gòu)造器正在初始化的對象
      //下面的代碼將會把該構(gòu)造器正在初始化的對象的age成員變量設為3
      this.age = 3;
    }


    public static void main(String[] args) {
      //使用new Person()創(chuàng)建的對象的age成員變量都將被設為3
      //下面代碼輸出3
      System.out.println(new Person().age);
    }
  }

與普通方法類似的是,大部分時候,在構(gòu)造器中訪問其它成員變量和方法時都可以省略this前綴,但如果構(gòu)造器中有一個與成員變量同名的局部變量,又必須在構(gòu)造器中訪問這個被覆蓋的成員變量,則必須使用this前綴。如上面程序所示。

當this作為對象的默認引用使用時,程序可以像訪問普通引用變量一樣來訪問這個this引用,甚至可以把this當成普通方法的返回值。請看下面程序:

public class Person {
    public int age;
    
    public Person grow() {
      age ++;
      return this;
    }

    public static void main(String[] args) {
      Person p = new Person();
      //可以連續(xù)調(diào)用同一個方法
      p.grow().grow().grow();
      System.out.println("p對象的age的值是:"+p.age);
    }
  }

運行結(jié)果為:

p對象的age的值是:3

從上面的程序可以看出,如果在某個方法中把this作為返回值,則可以多次連續(xù)調(diào)用同一個方法,從而使得代碼更加的簡潔。但這種方式容易造成實際意義的模糊,例如上面的group()方法,用于表示對象的生長,即age變量的值加1,實際上不應該有返回值。

最后需要強調(diào)一點:靜態(tài)成員不能直接訪問非靜態(tài)成員,即static修飾的方法不能訪問不適用static修飾的普通方法。對于static修飾的方法而言,可以使用類直接調(diào)用該方法,如果在static修飾的方法中使用this關(guān)鍵字,則這個關(guān)鍵字就無法指向合適的對象。所以,static修飾的方法中不能使用this引用。

以上所述是小編給大家介紹的this關(guān)鍵字詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 利用JStack排查死鎖問題和CPU100%問題

    利用JStack排查死鎖問題和CPU100%問題

    無論是再面試過程中還是再實際項目開發(fā)當中我們都有可能遇到這兩個問題如何利用JStack排查死鎖問題和CPU100%問題,文中給出了詳細的排查過程和解決方法,需要的朋友可以參考下
    2023-12-12
  • Java版仿QQ驗證碼風格圖片驗證碼

    Java版仿QQ驗證碼風格圖片驗證碼

    這篇文章主要為大家分享了java圖片驗證碼實例代碼,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java實現(xiàn)多個文檔合并輸出到一個文檔

    Java實現(xiàn)多個文檔合并輸出到一個文檔

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多個文檔合并輸出到一個文檔的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 淺析如何將多個SpringBoot項目打包到一個Docker容器中

    淺析如何將多個SpringBoot項目打包到一個Docker容器中

    在現(xiàn)代軟件開發(fā)中,Docker已成為一種流行的容器化技術(shù),能夠簡化應用的部署和管理,本文將詳細介紹如何將多個Spring Boot項目打包到一個Docker容器中,希望對大家有所幫助
    2024-10-10
  • java并發(fā)中DelayQueue延遲隊列原理剖析

    java并發(fā)中DelayQueue延遲隊列原理剖析

    DelayQueue隊列是一個延遲隊列,本文將結(jié)合實例代碼,詳細的介紹DelayQueue延遲隊列的源碼分析,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java中ArrayList和LinkedList的遍歷與性能分析

    Java中ArrayList和LinkedList的遍歷與性能分析

    這篇文章主要給大家介紹了ArrayList和LinkedList這兩種list的五種循環(huán)遍歷方式,各種方式的性能測試對比,根據(jù)ArrayList和LinkedList的源碼實現(xiàn)分析性能結(jié)果,總結(jié)結(jié)論。相信對大家的理解和學習具有一定的參考價值,有需要的朋友們下面跟著小編一起來學習學習吧。
    2016-12-12
  • springmvc字符編碼過濾器CharacterEncodingFilter的使用

    springmvc字符編碼過濾器CharacterEncodingFilter的使用

    這篇文章主要介紹了springmvc字符編碼過濾器CharacterEncodingFilter的使用,具有很好的參考價值,希望對大家有所幫助。
    2021-08-08
  • Spring Boot Redis 集成配置詳解

    Spring Boot Redis 集成配置詳解

    本篇文章主要介紹了Spring Boot Redis 集成配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java實現(xiàn)用戶短信驗證碼登錄功能實例代碼

    Java實現(xiàn)用戶短信驗證碼登錄功能實例代碼

    現(xiàn)在不管是各類的網(wǎng)站,還是大小社交app,登錄方式是越來越多了,但是大部分還是以短信登錄為主,本文主要介紹了java短信驗證碼登錄功能設計與實現(xiàn),感興趣的可以了解一下
    2021-11-11
  • Java事件機制要素及實例詳解

    Java事件機制要素及實例詳解

    這篇文章主要介紹了Java事件機制要素及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論

正定县| 雷州市| 普洱| 丰原市| 原平市| 尼勒克县| 武强县| 奉贤区| 松滋市| 梨树县| 灵川县| 彩票| 阿城市| 霞浦县| 巴林右旗| 于都县| 大荔县| 淳化县| 济源市| 彭泽县| 蚌埠市| 灌云县| 鞍山市| 大竹县| 普洱| 辽阳市| 仁化县| 喀喇沁旗| 色达县| 铁岭县| 西昌市| 凤翔县| 明星| 雷波县| 龙川县| 泸定县| 重庆市| 五原县| 祁阳县| 本溪市| 罗平县|