JAVA_SE基础——31.this关键字

学习笔记体会。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在构造函数中调用其余构造函数的时候,只能定义在构造函数的第一行,由于初始化动做要先执行,不然就会报错。

相关文章
相关标签/搜索