You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中this关键字未跟随实例变量时的作用解析

Java中两种非变量访问场景下的this用法说明

你代码里的两处this都不属于最常见的this.实例变量访问场景,二者的作用和指代完全不同,分别说明如下:

1. 无参构造内的this("pizza Rulez");

  • 这是Java为构造方法提供的专属语法,作用是调用当前类中匹配对应参数列表的其他构造方法,此处传入了字符串类型参数,会直接调用本类定义的PracticeThis(String str)有参构造方法执行。
  • 此处的this不是普通的对象引用,是专门标记「本类构造方法互调」的语法关键字,有严格的使用约束:
    • 只能在构造方法内部使用,普通成员方法不能写这种形式的调用
    • 必须作为构造方法中的第一条可执行语句,写在其他任何逻辑代码前面都会编译报错
  • 实际效果:当你通过无参构造创建PracticeThis实例时,不需要在无参构造里重复写实例变量赋值逻辑,会直接复用有参构造的初始化代码,把实例的str属性赋值为"pizza Rulez",减少冗余代码。

2. 成员方法内的System.out.println(this);

  • 此处的this是最基础的对象引用,指代当前正在调用practiceMyThisKnowledge方法的类实例本身:哪个对象调用了这个方法,这里的this就指向哪个对象。
  • 作用是在类的内部方法中,把当前实例自身作为参数传递给其他方法——这里就是把当前实例传给了System.out.println方法。
  • 执行逻辑:Java的println方法在接收到对象类型参数时,会自动调用该对象的toString()方法将其转为字符串再打印,因此这行代码的效果和写System.out.println(this.toString());完全一致,最终会输出你重写toString()方法返回的字符串内容。

你可以写个简单的测试方法验证效果:

public static void main(String[] args) {
    PracticeThis demo = new PracticeThis();
    demo.practiceMyThisKnowledge();
}

运行后控制台输出为:

Who says pizza rulez?
According to practiceThis: pizza Rulez

内容的提问来源于stack exchange,提问作者John Venicci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:09:30