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


     

     

  • 相关阅读:
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    Windows10+CLion+OpenCV4.5.2开发环境搭建
    Android解决部分机型WebView播放视频全屏按钮灰色无法点击、点击全屏白屏无法播放等问题
    MediaCodec.configure Picture Width(1080) or Height(2163) invalid, should N*2
    tesseract
    Caer -- a friendly API wrapper for OpenCV
    Integrating OpenCV python tool into one SKlearn MNIST example for supporting prediction
    Integrating Hub with one sklearn mnist example
    What is WSGI (Web Server Gateway Interface)?
    Hub --- 机器学习燃料(数据)的仓库
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465312.html
Copyright © 2011-2022 走看看