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