欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

this關(guān)鍵字詳解

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

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

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

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

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

public class Person {
    
    //定義一個(gè)move()方法
    public void move(){
      System.out.println("正在執(zhí)行move()方法");
    }
    //定義一個(gè)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對(duì)象
      Person p = new Person();
      //調(diào)用Person的eat()方法
      p.eat();
    }
  }

運(yùn)行結(jié)果為:

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

以上這種方式確實(shí)能夠做到在eat()方法里調(diào)用move()方法,但從main()方法里的程序中可以看出,一共創(chuàng)建了兩個(gè)對(duì)象:main()方法里創(chuàng)建一個(gè)對(duì)象;eat()方法里創(chuàng)建一個(gè)對(duì)象??墒钦娴男枰?jiǎng)?chuàng)建兩個(gè)對(duì)象嗎?答案是否定的!因?yàn)楫?dāng)程序調(diào)用eat()方法時(shí)一定會(huì)提供一個(gè)Person對(duì)象,而不需要重新創(chuàng)建一個(gè)Person對(duì)象了。

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

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

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

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

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

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

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

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


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

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

當(dāng)this作為對(duì)象的默認(rèn)引用使用時(shí),程序可以像訪問普通引用變量一樣來訪問這個(gè)this引用,甚至可以把this當(dāng)成普通方法的返回值。請看下面程序:

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)用同一個(gè)方法
      p.grow().grow().grow();
      System.out.println("p對(duì)象的age的值是:"+p.age);
    }
  }

運(yùn)行結(jié)果為:

p對(duì)象的age的值是:3

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

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

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

相關(guān)文章

  • Java使用反射操作數(shù)組示例

    Java使用反射操作數(shù)組示例

    這篇文章主要介紹了Java使用反射操作數(shù)組,結(jié)合實(shí)例形式分析了基于java反射機(jī)制操作數(shù)組的創(chuàng)建、賦值、輸出等相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • idea熱部署且開啟自動(dòng)編譯的實(shí)現(xiàn)方法

    idea熱部署且開啟自動(dòng)編譯的實(shí)現(xiàn)方法

    這篇文章主要介紹了idea熱部署且開啟自動(dòng)編譯的實(shí)現(xiàn)方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 利用java生成二維碼工具類示例代碼

    利用java生成二維碼工具類示例代碼

    二維碼對(duì)現(xiàn)在的人們來說再熟悉不過了,我們在開發(fā)的時(shí)候也經(jīng)常會(huì)用到二維碼,下面這篇文章主要給大家介紹了關(guān)于利用java生成二維碼工具類的相關(guān)資料,文中給了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • Java編程 多態(tài)

    Java編程 多態(tài)

    這篇文章主要介紹了關(guān)于Java編程的多態(tài),多態(tài)通過分離做什么和怎么做,從另一個(gè)角度將接口和實(shí)現(xiàn)分離開來。構(gòu)建可擴(kuò)展的程序,需要的朋友可以參考下
    2021-10-10
  • 設(shè)計(jì)模式之構(gòu)建(Builder)模式 建造房子實(shí)例分析

    設(shè)計(jì)模式之構(gòu)建(Builder)模式 建造房子實(shí)例分析

    構(gòu)建模式主要用來針對(duì)復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細(xì)節(jié),以達(dá)到良好的伸縮性,考慮到設(shè)計(jì)模式來源于建筑學(xué),因此舉一個(gè)建造房子的例子,需要的朋友可以參考下
    2012-12-12
  • Springboot之idea之pom文件圖標(biāo)不對(duì)問題

    Springboot之idea之pom文件圖標(biāo)不對(duì)問題

    這篇文章主要介紹了Springboot之idea之pom文件圖標(biāo)不對(duì)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring解決循環(huán)依賴問題的三種方法小結(jié)

    Spring解決循環(huán)依賴問題的三種方法小結(jié)

    在 Spring 中,循環(huán)依賴問題指的是兩個(gè)或多個(gè) bean 之間相互依賴形成的閉環(huán),具體而言,當(dāng) bean A 依賴于 bean B,同時(shí) bean B 也依賴于 bean A,就形成了循環(huán)依賴,本文就給大家介紹了Spring解決循環(huán)依賴問題的三種方法,需要的朋友可以參考下
    2023-09-09
  • 配置DispatcherServlet的方法介紹

    配置DispatcherServlet的方法介紹

    今天小編就為大家分享一篇關(guān)于配置DispatcherServlet的方法介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 如何基于js及java分析并封裝排序算法

    如何基于js及java分析并封裝排序算法

    這篇文章主要介紹了如何基于js及java分析并封裝排序算法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能

    Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能

    這篇文章主要為大家介紹了Spring?Security實(shí)現(xiàn)添加圖片驗(yàn)證功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論