this是Java語言的關鍵字後端
this是一個引用對象自己的指針,用來表示當前對象,它只和對象有關係。ide
在Java語言中,當建立一個對象後,Java虛擬機就會爲其分配一個指向該對象自己的指針,這個指針就是this。this只能用於在類的非靜態方法或者構造方法中,在方法體內定義的變量叫作局部變量,在類的內部方法體之外定義的外部定義的變量稱之爲成員變量。若是成員變量和方法中的局部變量的名字相同,那麼方法中成員變量將會白屏蔽。若是這個時候還要使用成員變量,就須要使用到關鍵字this。測試
使用方式和上面這段話的證實:this
this.成員變量
public class MyThisDemo { private int age = 18;//成員變量age private String name = "Java後端技術棧";//成員變量name private void print0() { int age = 20;//局部變量age String name = "lawt";//局部變量name System.out.println("print0 age=" + age); System.out.println("print0 name=" + name); } private void print1() { int age = 20;//局部變量age String name = "lawt";//局部變量name System.out.println("print1 age=" + this.age); System.out.println("print1 name=" + this.name); } public static void main(String[] args) { MyThisDemo myThisDemo = new MyThisDemo(); myThisDemo.print0(); myThisDemo.print1(); }}
輸出:spa
print0 age=20 print0 name=lawt print1 age=18 print1 name=Java後端技術棧
在該類中定義了兩個成員變量age和name。在print0
和print1
方法中都定義了兩個局部變量,而且成員變量和局部變量的名字是相同的。這樣會致使方法中的局部變量將屏蔽掉成員變量,因此這時候使用this關鍵字就能解決被屏蔽的問題。指針
使用這種方法更通用的作法是在構造方法和set方法中使用,好比:code
public class User { private int age; private String name; private String gender; public User(int age, String name, String gender) { //避免與構造方法入參名字衝突,因此使用了this修飾 this.age = age; this.name = name; this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { //避免與setAge方法的入參衝突,因此增長了this修飾 this.age = age; } //剩下幾個get set同樣,這裏就不貼代碼}
注意:orm
最燃方法中沒有和成員變量重名的變量,也可使用this來引用成員變量,可是通常狀況下,若是用this來引用成員變量,也僅僅是在構造方法和set方法隱藏成員變量的時候使用。對象
若是在類的方法中須要返回一個對象,而且該對象時方法所在的類的當前對象,可使用this關鍵字做爲方法的返回值。ci
public class User { public User getUser(){ return this; } public User() { } public static void main(String[] args) { //建立用戶類的對象 User user=new User(); //instanceof 嚴格來講是Java中的一個雙目運算符 //用來測試一個對象是否爲一個類的實例 System.out.println(user.getUser() instanceof User); }}
運行輸出:true
這裏定義的一個方法getUser
方法,並使用this關鍵字返回當前的對象User,在main方法中建立一個User兵使用instanceOf
來判斷getUser
方法返回的對象與User的關係。
除了可使用this關鍵字引用成員變量和引用當前對象之外,還能夠實用this關鍵字調用構造方法;
public class User { private int age; private String name; private String gender; public User(int age, String name) { //調用下面三個入參的構造方法 this(age, name, "man"); } public User(int age, String name, String gender) { this.age = age; this.name = name; this.gender = gender; } //省略 set get 方法 @Override public String toString() { return "User{" + "age=" + age + ", name='" + name + '\'' + ", gender='" + gender + '\'' + '}'; } public static void main(String[] args) { User user=new User(19,"lisi"); System.out.println(user.toString()); }}
輸出:
User{age=19, name='lisi', gender='man'}