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在構造函數中調用其餘構造函數的時候,只能定義在構造函數的第一行,由於初始化動做要先執行,不然就會報錯。

相關文章
相關標籤/搜索