一個初學者對Java中this關鍵字的理解

此文章僅表明我的想法,若是您發現文章中有錯誤或者其餘問題,請在評論區指出,不勝感激this

對於初學者來講,this關鍵字通常來講有三種應用:spa

一:(訪問成員變量)對象

  經過this關鍵字能夠明確的訪問一個類的成員變量,解決了與局部變量名稱衝突的問題。blog

class Person虛擬機

{編譯

  int age;class

  //定義一個無參的構造方法變量

  //我忘了從哪本書上看的,上邊說在類中最好都定義一個無參的構造方法,具體緣由若是哪位大神理解請在評論中解答,謝謝程序

  public Person(){}方法

  //定義一個帶一個形參的構造方法

  public Person(int age)

  {

    this.age=age;

  }

}

  這是一段最基本的代碼,帶形參的構造方法的參數被定義爲age,這是一個局部變量,此外在類中還定義了一個成員變量,也叫age。兩個變量名字相同,Java虛擬機在編譯過程當中如何判斷該使用哪一個變量?這個時候this關鍵字就起做用了。代碼中this.age表明的是成員變量,也叫對象屬性,而age表明的是局部變量。也就是說,在構造方法中使用「this.age」訪問的是成員變量,而使用「age」則是訪問局部變量。代碼this.age=age;其實就是將局部變量(形參)的值賦給了成員變量。

二:(調用成員方法)

  經過this關鍵字能夠調用成員方法。

class Person

{

  public void speak()

  {

    System.out.println("我是一我的");

  }

  public void introduce()

  {

    this.speak();

    System.out.println("我是一個好人");

  }

}

  在introduce()方法中調用speak()方法,使用了this關鍵字。不過,此處的this能夠省略不寫。也就是說「this.speak();」和「speak();」的效果是徹底同樣的。這個不須要過多介紹。

三:(調用構造方法)

  構造方法是在建立對象的時候被Java虛擬機自動調用的,在程序中不能像其餘自定義方法那樣被調用。可是在構造方法中可使用this(參數1,參數2......)的形式來調用其餘的構造方法。

這段代碼的運行結果以下:

  也就是說,在實例化Person對象時,調用了有參的構造方法,又在該方法中經過「this();」調用了無參的構造方法。所以運行結果顯示兩個構造方法。

  可是,在使用this調用類的構造方法時,應該注意三點:

  一、只能在構造方法中調用構造方法,不能在成員方法中調用。

  二、在構造方法中,使用this調用構造方法的語句必須位於第一行,並且只能出現一次

  public Person()

  {

    int age=18;

    this(age); //在無參的構造方法中調用有參的構造方法,可是不在第一行,編譯錯誤。

  }

  三、不能在一個類的兩個構造方法中使用this互相調用

  class Person

  {

    //定義無參的構造方法

    public Person()

    {

      this(18);//調用有參的構造方法

    }

    //定義有參的構造方法

    public Person(int age)

    {

      this();//調用無參的構造方法

    }

    //這段代碼中因爲有參的構造方法和無參的構造方法相互調用了,因此編譯會報錯!

  }

 

此次就寫這麼多吧,歡迎大神來指點!

相關文章
相關標籤/搜索