zoukankan      html  css  js  c++  java
  • JAVA_SE基础——31.this关键字

    学习笔记体会。

     

    this的通俗解释:

    有一个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();
    		
    	}
    }

    运行结果是:

    老鼠在吃...

     

    为何是老鼠在吃呢 而不是狗在吃

    因为存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java 采取的是就近原则的机制访问的。)。


    那么问题就来了???

    需要解决这种同类同变量名时怎么区分并且调用?

     

    用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在构造函数中调用其他构造函数的时候,只能定义在构造函数的第一行,因为初始化动作要先执行,否则就会报错。


     

     

  • 相关阅读:
    vuex
    koa2+node+vue自启服务运行本地脚本
    重新认识js(一)
    JQuery图片左右无缝滚动
    javascript兼容性很好的省市区联动,易修改
    JQuery超级简单的TAB选项卡
    ViewState的原理分析
    JQuery图片切换特效
    asp.net验证控件详解【转】
    时间线 制作
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465312.html
Copyright © 2011-2022 走看看