this关键字
this关键字代表当前对象的引用。
this概念
什么是this
this指代当前调用方法的对象本身。
Java
public class Person {
String name;
public void introduce() {
System.out.println("我叫" + this.name);
// this指当前对象(调用introduce的对象)
}
}
Person p = new Person();
p.name = "张三";
p.introduce(); // this指p对象
this用法
区分成员变量与局部变量
当局部变量与成员变量同名时,用this区分。
Java
public class Student {
private String name; // 成员变量
private int age;
public void setName(String name) { // 参数(局部变量)
this.name = name; // this.name是成员变量,name是参数
}
public void setAge(int age) {
this.age = age; // 区分同名变量
}
}
Student s = new Student();
s.setName("张三");
s.setAge(20);
调用本类其他构造方法
this()调用本类其他构造方法,必须在第一行。
Java
public class Student {
private String name;
private int age;
// 主构造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 调用主构造
public Student(String name) {
this(name, 18); // 调用两参数构造
}
// 调用主构造
public Student() {
this("默认", 18); // 调用两参数构造
}
}
调用本类方法
Java
public class Calculator {
private int result;
public void add(int a, int b) {
result = a + b;
}
public void addAll(int a, int b, int c) {
this.add(a, b); // 调用本类add方法
result += c; // 或 this.result += c
}
}
// this调用方法通常可省略,除非区分同名
返回当前对象
Java
public class Builder {
private String name;
private int age;
public Builder setName(String name) {
this.name = name;
return this; // 返回当前对象
}
public Builder setAge(int age) {
this.age = age;
return this; // 返回当前对象
}
}
// 链式调用
Builder builder = new Builder()
.setName("张三")
.setAge(25);
作为参数传递
Java
public class Student {
private String name;
public void register() {
System.out.out.println("注册中...");
// 将当前对象传给其他方法
save(this); // this作为参数
}
public void save(Student s) {
// 保存学生信息
}
}
this使用场景
setter方法赋值
Java
public class User {
private String name;
private int age;
private String email;
public void setName(String name) {
this.name = name; // 成员 = 参数
}
public void setAge(int age) {
this.age = age;
}
public void setEmail(String email) {
this.email = email;
}
}
构造方法初始化
Java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name; // 初始化成员变量
this.age = age;
}
}
方法链式调用
Java
public class Person {
private String name;
private int age;
public Person name(String name) {
this.name = name;
return this; // 返回this支持链式调用
}
public Person age(int age) {
this.age = age;
return this;
}
}
// 链式调用创建对象
Person p = new Person()
.name("张三")
.age(25);
this与成员变量
访问成员变量
Java
public class Test {
private int value = 10;
public void method() {
int value = 20; // 局部变量
System.out.println(value); // 20(局部变量)
System.out.println(this.value); // 10(成员变量)
}
}
this可省略的情况
Java
public class Student {
private String name;
public String getName() {
return name; // 等价于 return this.name;
}
public void study() {
System.out.println(name + "学习"); // 等价于this.name
}
}
无同名局部变量时,this可省略。
this()调用构造规则
必须在第一行
Java
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public Student() {
// System.out.println("hello"); // 错误:this()前不能有代码
this("默认"); // 必须第一行
}
}
不能在普通方法中调用
Java
public class Student {
private String name;
public Student(String name) {
this.name = name;
}
public void method() {
// this("张三"); // 错误:普通方法不能用this()
}
}
不能形成循环调用
Java
public class Student {
public Student() {
this("张三"); // 调用有参构造
}
public Student(String name) {
this(); // 调用无参构造 → 循环,编译错误
}
}
this与super对比
this与super区别
| 特性 | this | super |
|---|---|---|
| 代表 | 当前对象引用 | 父类对象引用 |
| 访问 | 本类成员 | 父类成员 |
| 调用构造 | this()调用本类构造 | super()调用父类构造 |
| 使用位置 | 实例方法、构造方法 | 子类构造方法、实例方法 |
使用示例
Java
public class Parent {
String name = "父类";
public Parent() {
System.out.println("父类构造");
}
}
public class Child extends Parent {
String name = "子类";
public Child() {
super(); // 调用父类构造
System.out.println("子类构造");
}
public void show() {
System.out.println(this.name); // 子类
System.out.println(super.name); // 父类
}
}
要点总结
- this代表当前对象的引用
- 区分成员变量与局部变量同名情况
- this()调用本类其他构造方法
- this()必须在构造方法第一行
- this调用本类方法(通常可省略)
- return this返回当前对象(链式调用)
- this作为参数传递当前对象
- 无同名变量时this可省略
- 普通方法中不能用this()
- this与super:this本类,super父类
📝 发现内容有误?点击此处直接编辑