学习笔记体会。html
this的通俗解释:java
有一个A类,一个B方法,一个C变量,其中B和C都在类A中
this.B()就是调用A类中的B方法
this.C=1(假设C是一个int变量)就是给类A的C变量赋了1这个值
简单的说就是调用本类的方法或者变量(都是成员的)
函数
需求: 使用java类描述一个动物。学习
class Animal{ String name = "狗"; //成员变量 //this关键字表明了所属函数的调用者对象 public void eat(){ //System.out.println("this:"+ this); String name = "老鼠"; //局部变量 System.out.println(name+"在吃..."); //需求: 就要目前的name是成员变量的name. } } class Demo6 { public static void main(String[] args) { Animal a = new Animal(); //如今在内存中存在两份name数据。 a.eat(); } }
运行结果是:this
老鼠在吃...spa
为什么是老鼠在吃呢 而不是狗在吃htm
由于存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java 采起的是就近原则的机制访问的。)。对象
那么问题就来了???内存
须要解决这种同类同变量名时怎么区分而且调用?it
用this关键字来解决就能够了。
先给你们看看内存图估计就懂了
下面看我用this关键字来解决上面的问题。
class Animal{ String name ; //成员变量 public Animal(String name){ this.name = name; } //this关键字表明了所属函数的调用者对象 public void eat(){ //System.out.println("this:"+ this); String name = "老鼠"; //局部变量 System.out.println(this.name+"在吃..."); //需求: 就要目前的name是成员变量的name. System.out.println(this); } } class Demo6 { public static void main(String[] args) { Animal dog = new Animal("狗"); //如今在内存中存在两份name数据。 Animal cat = new Animal("猫"); dog.eat(); cat.eat(); } }
狗在吃...
Animal@15db9742
猫在吃...
Animal@6d06d69c
上面有两句内存地址 就说明了第一次调用了函数和第二次调用了函数的对象是不一样的(第一次是dog,第二次是cat),这就区分了 两个对象分别调用变量而不混淆的好处了。。
若是这样都不理解的话,能够这样认为this关键字表明了所属函数的调用者对象。 例如 第一次调用:
(this.name+"在吃...");
能够当作
(dog.name+"在吃...");
dog变量地址是Animal@15db9742 而后就去Animal对象找name的值 以此类推。
(我的观点)this我认为最主要特色是:区分红员变量和局部变量的名称冲突,哪一个对象调用了this所在的函数,this就表明哪一个对象
this关键字表明了所属函数的调用者对象。
this表明其所在函数所属对象的引用。换言之,this代本类对象的引用。
当成员变量和局部变量重名,能够用关键字this来区分,this就是所在函数所属对象的引用。
简单说,哪一个对象调用了this所在的函数,this就表明哪一个对象。通常方法调用默认加this。
何时使用this关键字呢?
当在函数内须要用到调用该函数的对象时,就用this。
P.S. 经过this在构造函数中调用其余构造函数的时候,只能定义在构造函数的第一行,由于初始化动做要先执行,不然就会报错。