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'}