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
相关产品推荐
相关产品推荐

