java中的this关键字是写在方法里面的,分为以下两种情况:
若在构造方法中出现this关键字,this表示当前正在创建的对象。若在成员方法中出现关键字this,this表示当前正在调用的对象。先解释第一句话: 【范例1】:构造方法中的this
class ThisDemo{ // 构造方法 public ThisDemo() { // 构造方法中的this表示当前正在创建的对象 System.out.println("构造方法中的this:" + this); } // 成员方法 /* public void show() { // 成员方法中的this表示当前正在调用的对象 System.out.println("show中的this:" + this); // ThisDemo@63d4e2ba } */ public static void main(String args[]) { // 创建ThisDemo类型的引用,指向ThisDemo类的对象 ThisDemo td = new ThisDemo(); //td.show(); System.out.println("main中的td:" + td); // ThisDemo@63d4e2ba } }输出结果:
构造方法中的this:ThisDemo@63d4e2ba main中的td:ThisDemo@63d4e2ba从以上结果可看出对象td和this的值是一样的。
之前说过“构造方法中的this表示当前正在创建的对象”。 本例中,“当前正在创建的对象”就是“new ThisDemo()”,this表示当前正在创建的对象,因此this就表示“new ThisDemo()”。引用变量td也表示当前正在创建的对象"new ThisDemo()",因此this的值也就和td的值相同。
如果"当前正在创建的对象"是"new Teacher()",那么this就表示"new Teacher()",如果"当前正在创建的对象"是"new Animal()",那么this就表示"new Animal()"。
------------------------------------------------------------------华丽分割线------------------------------------------------------------------
解释第二句话: 【范例2】:成员方法中的this
class ThisDemo{ // 成员方法 public void show() { // 成员方法中的this表示当前正在调用的对象 System.out.println("show中的this:" + this); // ThisDemo@63d4e2ba } public static void main(String args[]) { // 创建ThisDemo类型的引用,指向ThisDemo类的对象 ThisDemo td = new ThisDemo(); td.show(); System.out.println("main中的td:" + td); // ThisDemo@63d4e2ba } }输出结果:
show中的this:ThisDemo@63d4e2ba main中的td:ThisDemo@63d4e2ba从以上结果可看出二者的值是相同的。 之前说过“成员方法中的this表示当前正在调用的对象”。翻译成人话就是“谁调用的该方法,this就代表谁”。很显然,是td调用的show()方法,因此this代表td,this和td的值也就相同了。 如果是one调用的show()方法,那么this就代表one,如果是two调用的show()方法,this就代表two。
从【范例1】和【范例2】我们可以得出:this和td只是同一个对象的两种称呼而已,二者都代表“new ThisDemo()”。就比如td是鲁迅,this是周树人,都表示同一人同一对象,只是称呼不同而已。也可以理解成 ThisDemo this = td,因为this本质上就是引用变量,是当前类类型的引用变量。