首页 > 编程笔记 > Java笔记 阅读:22

Java this关键字的3种用法(非常详细)

this 是 Java 的关键字之一,它其实是一个引用变量,指向当前对象,即通过类创建出的那个对象。

this 关键字的用法主要包含以下三种:
  1. 访问当前对象的属性;
  2. 调用当前对象的方法;
  3. 调用构造方法。

this访问当前对象的属性

this 最常见的用法是访问当前对象的属性,我们经常会在构造方法中看到通过 this 来对对象属性进行赋值的操作。我们来看一下假如不使用 this 会是什么情况,观察下面的实例程序:
public class Worker {
    public int age;
    public String name;
   
    public Worker(int age, String name) {
        age = age;
        name = name;
    }
     
   public static void main(String[] args) {
        Worker xiaoming = new Worker(10,"xiaoming");
        System.out.println(xiaoming.age);
        System.out.println(xiaoming.name);
   }
}
程序里的 Worker 类的构造方法中没有使用 this,然后创建一个“xiaoming”对象并输出该对象的属性值,结果是“0”和“null”。

如果我们在构造方法中稍微改造一下,对两个属性都添加 this 关键字:
public class Worker {
    ...
   
    public Worker(int age, String name) {
         this.age = age;
         this.name = name;
    }
    
    ...
}
此时再运行程序就可以看到输出结果为“10”和“xiaoming”。

实际上,如果类的属性名和构造方法参数名不同时则可以省略 this。比如:
public class Worker {
    ...
   
    public Worker(int age2, String name2) {
         age = age2;
         name = name2;
    }
   
    ...
}
同样的 Worker 类,我们将构造方法的参数名改为 age2 和 name2,那么不使用 this 就能够对当前对象的属性进行赋值,最终的输出结果为“10”和“xiaoming”。

this调用当前对象的方法

this 还有一个常见的用法是调用当前对象的方法,例如:
public class Dog {
    public void run() {
        System.out.println("running...");
    }
    
    public void bark() {
        System.out.println("barking...");
    }
    
    public void runAdnBark() {
        this.run();
        this.bark();
    }
}
程序中的 Dog 类中定义了 run() 和 bark() 两个方法,那么可以在另一个方法 runAdnBark() 中通过 this.run() 和 this.bark() 来调用这两个方法。

实际上这里也可以省略 this 关键字,因为这种情况下编译器会帮我们自动加上 this。

this调用构造方法

我们还可以通过 this() 的方式在类的某个构造方法中调用另一个构造方法,这种方式能提升代码的重复使用率。

例如:
public class Worker {
    public int age;
    public String name;
    public int height;
   
    public Worker(int age, String name) {
        this.age = age;
        this.name = name;
    }
      
    public Worker(int age, String name, int height) {
        this(age, name);
        this.height = height;
    }
}
比如程序中的 Worker 类共有 age、name 和 height 三个属性,如果已经定义好了包含参数 age 和 name 的构造方法,就可以在包含 age、name 和 height 三个参数的构造方法中通过 this(age, name) 来调用对应的构造方法,从而实现对 age 和 name 的赋值操作。

需要注意的是,必须是在构造方法中且在构造方法中的第一行代码就调用 this(),否则会报错,比如:
public class Worker {
    public int age;
    public String name;
    public int height;
   
    public Worker(int age, String name) {
        this.age = age;
        this.name = name;
    }
   
    public Worker(int age, String name, int height) {
        this.height = height;
        this(age, name);
    }
}
程序中将“this(age, name);”放到“this.height = height;”后面就会导致编译错误。

相关文章