Java中的this关键字,你真的懂了吗?

112 阅读3分钟

开启掘金成长之旅!这是我参加「掘金日新计划·12月更文挑战」的第五天,点击查看活动详情

Java this关键字详解

在Java中this关键字是一种常用的关键字,可用于任何实例方法内只想当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。

this关键词有三种用法:

  1. this.属性名
  2. this.方法名
  3. this()访问构造方法

1.this.属性名

大部分时候,普通方法访问其他方法、成员变量时无须使用this前缀,但如果方法里面有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的成员变量,则必须使用this前缀。
例如:
现在有一个教师类Teacher的定义如下

public class Teacher{

    private String name;//姓名
    private int age;//年龄
    private double salary;//工资
   

上述类中Teacher的三个属性name、age、salary的作用域都为私有,因此在类外无法直接调用访问它们。所以,在Teacher类内创建了一个构造方法Teacher,该构造方法可以对这三个属性进行赋值。

public Teacher(String name,int age,double salary){

       this.name = name;//设置教师姓名
       this.age = age;//设置教师年龄
       this.salary = salary;//设置教师工资
       

在Teacher类的构造方法中使用了this关键字对属性name、age、salary进行赋值,this表示当前对象。this.name = name语句表示一个赋值语句,等号左边的this.name是指当前对象具有的变量name(成员变量),等号右边的name表示该构造方法中的参数(局部变量)

提示:当一个类属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用this关键字来访问类中的属性,用来区分类的属性和方法中的参数。

2.this.方法名

这种是指在普通成员方法中使用this调用另一个成员方法。

class Student{
   public String name;
   public void doClass(){
        System.out.println(name+"上课");
        this.doHomework();
   }
   public void doHomework(){
        System.out.println(name+"正在写作业");
   }
}
public class Test{
   public static void main(String[] args){
       Student student = new Student();
       student.name = "小明";
       student.doClass();
   }
}   

上述代码的运行结果为:
小明上课
小明正在写作业

所以,关键词this是指向调用对象本身的引用名。可以用this关键字引用对象的实例成员。

3.this()访问构造方法

this() 用来访问本类的构造方法(构造方法是类的一种特殊方法,方法名称和类名相同,没有返回值。括号中可以有参数,如果有参数就是调用指定的有参构造方法。
下面定义一个 Student 类,使用 this( ) 调用构造方法给 name 赋值,Student 类的代码如下所示:

public class Student{
    String name;
    //无参构造方法
    public Student(){
        this("张三");
    }
    //有参构造方法
    public Student(String name){
        this.name = name;
    }  
    //输出name
    public void print(){
        System.out.println("姓名" + name);
    }
    public static void main(String[] args){
        Student student = new Student();
        stu.print();
    }
}
//输出结果:
//姓名:张三

注意:
this()不能在普通方法中使用,只能写在构造方法中。 在构造方法中使用时,必须是第一条语句。