中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中this關鍵字的用法示例

發布時間:2021-08-21 11:19:36 來源:億速云 閱讀:178 作者:小新 欄目:編程語言

這篇文章主要介紹了java中this關鍵字的用法示例,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Java提供了一個this關鍵字,this關鍵字總是指向調用該方法的對象。根據this出現的位置的不同,this作為對象的默認引用有兩種情形。

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

2)在方法中引用調用該方法的對象。

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

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

運行結果為:

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

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

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

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

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

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

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

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

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

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


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

與普通方法類似的是,大部分時候,在構造器中訪問其它成員變量和方法時都可以省略this前綴,但如果構造器中有一個與成員變量同名的局部變量,又必須在構造器中訪問這個被覆蓋的成員變量,則必須使用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();
      //可以連續調用同一個方法
      p.grow().grow().grow();
      System.out.println("p對象的age的值是:"+p.age);
    }
  }

運行結果為:

p對象的age的值是:3

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

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java中this關鍵字的用法示例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武胜县| 东海县| 淮滨县| 长海县| 信丰县| 沈阳市| 平山县| 扎鲁特旗| 丰原市| 丹棱县| 左贡县| 青浦区| 裕民县| 汶上县| 旬邑县| 左权县| 沂源县| 英山县| 盖州市| 白城市| 会东县| 洱源县| 当雄县| 永州市| 南雄市| 温州市| 淮安市| 鄂温| 琼结县| 应城市| 大连市| 南郑县| 浠水县| 衡水市| 绵阳市| 遂昌县| 弥勒县| 怀仁县| 郧西县| 韩城市| 平泉县|