定義
this是Java語言的關鍵字
this是一個引用對象本身的指針,用來表示當前對象,它只和對象有關係。
使用場景
使用this關鍵字引用成員變量
在Java語言中,當創建一個對象後,Java虛擬機就會爲其分配一個指向該對象本身的指針,這個指針就是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();
}
}
輸出:
print0 age=20 print0 name=lawt print1 age=18 print1 name=Java後端技術棧
在該類中定義了兩個成員變量age和name。在print0
和print1
方法中都定義了兩個局部變量,並且成員變量和局部變量的名字是相同的。這樣會導致方法中的局部變量將屏蔽掉成員變量,所以這時候使用this關鍵字就能解決被屏蔽的問題。
使用這種方法更通用的做法是在構造方法和set方法中使用,比如:
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一樣,這裏就不貼代碼
}
注意:
最燃方法中沒有和成員變量重名的變量,也可以使用this來引用成員變量,但是一般情況下,如果用this來引用成員變量,也僅僅是在構造方法和set方法隱藏成員變量的時候使用。
使用this關鍵字引用當前對象
如果在類的方法中需要返回一個對象,並且該對象時方法所在的類的當前對象,可以使用this關鍵字作爲方法的返回值。
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關鍵字引用成員變量和引用當前對象以外,還可以實用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'}
注意:只是構造方法調用構造方法纔可以這麼用,類中的其他方法不能使用這種方法調用。
加我微信,送福利,暗號是:福利