全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-08 5 分钟 ✍️ juanwangdev

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区别

特性thissuper
代表当前对象引用父类对象引用
访问本类成员父类成员
调用构造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父类

📝 发现内容有误?点击此处直接编辑

← 上一篇 static关键字
下一篇 → 包与访问修饰符
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库