此文章僅表明我的想法,若是您發現文章中有錯誤或者其餘問題,請在評論區指出,不勝感激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();//調用無參的構造方法
}
//這段代碼中因爲有參的構造方法和無參的構造方法相互調用了,因此編譯會報錯!
}
此次就寫這麼多吧,歡迎大神來指點!